如何使用行值动态地 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 示例。
我有两个 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 示例。