如何使用行值动态地 select Oracle SQL 11g 中的列名?

How can I use a row value to dynamically select a column name in Oracle SQL 11g?

我有两个 table,每个 "batch_number" 有一行,另一个有每个批次的缺陷详细信息。第一个 table 有一个 "defect_of_interest" 列,我想 link 到第二个 table 中的其中一个列。我正在尝试编写一个查询,然后为 "batch_number".

中的任何 "unit_number" 动态选择 linked 列中的最大值

这是带有每个 table 示例数据的 SQLFiddle:http://sqlfiddle.com/#!9/a1c27d

例如,DEFECT_DETAILS.SCRATCHES 列中 BATCH_NUMBER = A1 的最大值为 12。

这是我想要的输出:

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

我试过使用 PIVOT 函数,但无法正常工作。不确定它是否适用于这种情况。任何帮助将不胜感激。

如果列数是固定的(好像是)可以用CASE到select具体值根据相关的table。那么聚合就简单了。

例如:

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 示例。