如何在oracle sql 11g中使用行值动态选择列名?

guz6ccqo  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(385)

我有两个表,一个表中每个“批次号”只有一行,另一个表中每个批次都有缺陷详细信息。第一个表有一个“defect\u of\u interest”列,我想链接到第二个表中的一个列。我正在尝试编写一个查询,然后在动态链接的列中为“batch\u number”中的任何“unit\u number”选择最大值。
下面是每个表的sqlfiddle示例数据:http://sqlfiddle.com/#!9/a1c27d型
例如,批次号=a1的“缺陷\详细信息.scratches”列中的最大值为12。
这是我想要的结果:

BATCH_NUMBER  DEFECT_OF_INTEREST  MAXIMUM_DEFECT_COUNT  
------------  ------------------  --------------------
A1            SCRATCHES           12
B3            BUMPS               4
C2            STAINS              9

我试过使用pivot函数,但无法使其工作。不确定在这种情况下是否有效。任何帮助都将不胜感激。

2fjabf4q

2fjabf4q1#

如果列的数量是固定的(看起来是),你可以使用 CASE 根据相关表格选择具体数值。那么聚合就很简单了。
例如:

select
  batch_number,
  max(defect_of_interest) as defect_of_interest,
  max(defect_count) as maximum_defect_count
from (
  select
    d.batch_number,
    b.defect_of_interest,
    case when b.defect_of_interest = 'SCRATCHES' then d.scratches
        when b.defect_of_interest = 'BUMPS' then d.bumps
        when b.defect_of_interest = 'STAINS' then d.stains
    end as defect_count
  from defect_details d
  join batches b on b.batch_number = d.batch_number
) x
group by batch_number
order by batch_number;

参见db<>fiddle中的oracle示例。

相关问题