0

所以我有一个表格,其中数据是这样的:

╔═══════════╦═════════════╦═════════╗
║   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 列检查是否有列 3 = 2 的记录,如果有拉回该记录。如果第 1 列和第 2 列从未有 column3 = 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 组合至少有一条记录

4

1 回答 1

1

我认为这也应该在 DB2 上完成工作:

SELECT Column1, Column2, 
       MAX (CASE Column3 WHEN 2 THEN 2 ELSE NULL END)
  FROM t
 GROUP BY Column1, Column2;

有关 ORACLE 数据库,请参阅此 Fiddle

结果:

COLUMN1     COLUMN2         COLUMN3
---------   -----------     -------
134024323   81999000004     (null)
127001126   90489495251     2
346122930   346000016       2
346207637   346000016       (null)
于 2013-10-08T19:34:56.623 回答