在SQL查询中查找一列中的重复项,然后使用第二列来确定要返回的记录

时间:2013-10-08 19:03:56

标签: sql db2

所以我有一个数据如下的表:

╔═══════════╦═════════════╦═════════╗
║   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组合

1 个答案:

答案 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)