我有一个包含三列的表,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”
小组中的任何一个请告诉我如何编写查询以获取目标表中的数据 谢谢
答案 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;