Oracle SQL - 通过GROUP BY检索数据,然后根据结果按组派生数据

时间:2014-11-18 14:22:33

标签: sql oracle group-by

我有一个包含三列的表,Col1,Col2和Col3,其中Col2是主键。 以下是SOURCE表格数据

Col1    Col2    Col3
G1      S1      C
G1      S2      Y
G1      S3      U
G2      S4      C
G2      S5      Y
G3      S6      C
G3      S7      C
G4      S8      Y
G4      S9      Y
G5      S10     U
G5      S11     U
G6      S12     C
G6      S13     U
G7      S14     Y
G7      S15     U

预期的TARGET表只有Col1和Col3,数据应该是

Col1    Col3
G1      U
G2      B
G3      C
G4      Y
G5      U
G6      U
G7      U

使用的逻辑是:
1)对于给定的Col1记录,如果所有col2记录在Col3中具有相同的值,则返回所有col2记录的一条记录(示例G3,G4,G5)
2)对于给定的Col1记录,如果所有col2记录具有“C”或“Y”,则返回“B”(示例G2)
3)对于所有剩余的组合,返回Col3的“U”

小组中的任何一个请告诉我如何编写查询以获取目标表中的数据 谢谢

1 个答案:

答案 0 :(得分:1)

为此使用CASE构造。对于'C'和'Y',您必须有条件地计算(即使用CASE)。

select 
  col1, 
  case 
    when min(col3) = max(col3) then min(col3)
    when count(case when col3 not in ('C','Y') then 1 end) = 0 then 'B'
    else 'U'
  end as col3
from mytable
group by col1;