所以我有一个数据如下的表:
╔═══════════╦═════════════╦═════════╗
║ Column1 ║ Column2 ║ Column3 ║
╠═══════════╬═════════════╬═════════╣
║ 127001126 ║ 90489495251 ║ 1 ║
║ 127001126 ║ 90489495251 ║ 2 ║
║ 134024323 ║ 81999000004 ║ 1 ║
║ 346122930 ║ 346000016 ║ 2 ║
║ 346122930 ║ 346000016 ║ 1 ║
║ 346122930 ║ 346000016 ║ 3 ║
║ 346207637 ║ 346000016 ║ 1 ║
║ 346207637 ║ 346000016 ║ 3 ║
╚═══════════╩═════════════╩═════════╝
我需要一个输出:
╔═══════════╦═════════════╦═════════╗
║ Column1 ║ Column2 ║ Column3 ║
╠═══════════╬═════════════╬═════════╣
║ 127001140 ║ 90489495251 ║ 2 ║
║ 134024323 ║ 81999000004 ║ NULL ║
║ 346122930 ║ 346000016 ║ 2 ║
║ 346207637 ║ 346000016 ║ NULL ║
╚═══════════╩═════════════╩═════════╝
基本上检查是否有多个记录,其中第1列和第2列检查是否存在column3 = 2的记录,如果有回记录的话。如果第1列和第2列永远不会有第3列= 2的组合,那么用column3 = null拉回一条记录
编辑: 我试过的代码:
Select *
from (SELECT* From sometable
Where column3 = 2) D Full outer join
(SELECT* FROM sometable
Where coulmn3 = 1) E
on D.Column1 = E.Column1
and D.Column2 = E.Column2
(SELECT * from
FROM sometable
Where coulmn3 = 3) F Full outer join
on E.Column1 = F.Column1
and E.Column2 = F.Column2
我知道上面的内容不会将column3值更改为null。但我知道= t它会让我至少只有一个记录为每个column1和column2组合
答案 0 :(得分:1)
我认为这也应该在DB2上完成工作:
SELECT Column1, Column2,
MAX (CASE Column3 WHEN 2 THEN 2 ELSE NULL END)
FROM t
GROUP BY Column1, Column2;
有关ORACLE数据库,请参阅this Fiddle。
结果:
COLUMN1 COLUMN2 COLUMN3
--------- ----------- -------
134024323 81999000004 (null)
127001126 90489495251 2
346122930 346000016 2
346207637 346000016 (null)