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

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

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

  1. BATCH_NUMBER DEFECT_OF_INTEREST MAXIMUM_DEFECT_COUNT
  2. ------------ ------------------ --------------------
  3. A1 SCRATCHES 12
  4. B3 BUMPS 4
  5. C2 STAINS 9

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

2fjabf4q

2fjabf4q1#

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

  1. select
  2. batch_number,
  3. max(defect_of_interest) as defect_of_interest,
  4. max(defect_count) as maximum_defect_count
  5. from (
  6. select
  7. d.batch_number,
  8. b.defect_of_interest,
  9. case when b.defect_of_interest = 'SCRATCHES' then d.scratches
  10. when b.defect_of_interest = 'BUMPS' then d.bumps
  11. when b.defect_of_interest = 'STAINS' then d.stains
  12. end as defect_count
  13. from defect_details d
  14. join batches b on b.batch_number = d.batch_number
  15. ) x
  16. group by batch_number
  17. order by batch_number;

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

展开查看全部

相关问题