在SQL查询中,在一列中查找重复项,然后使用第二列确定要返回的记录
我有一个表,其中的数据如下:在SQL查询中,在一列中查找重复项,然后使用第二列确定要返回的记录,sql,db2,Sql,Db2,我有一个表,其中的数据如下: ╔═══════════╦═════════════╦═════════╗ ║ Column1 ║ Column2 ║ Column3 ║ ╠═══════════╬═════════════╬═════════╣ ║ 127001126 ║ 90489495251 ║ 1 ║ ║ 127001126 ║ 90489495251 ║ 2 ║ ║ 134024323 ║ 81999000004 ║ 1 ║ ║ 34612
╔═══════════╦═════════════╦═════════╗
║ 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。但是我想,如果每个column1和column2组合都至少有一条记录,那么在DB2上也应该这样做:
SELECT Column1, Column2,
MAX (CASE Column3 WHEN 2 THEN 2 ELSE NULL END)
FROM t
GROUP BY Column1, Column2;
有关ORACLE数据库的详细信息,请参阅
结果:
COLUMN1 COLUMN2 COLUMN3
--------- ----------- -------
134024323 81999000004 (null)
127001126 90489495251 2
346122930 346000016 2
346207637 346000016 (null)
您使用的是哪种数据库管理系统?博士后?Oracle?为什么输出不包括
127001126 | 90489495251 | null
?因为我只想为每个column1/column2组合保存一条记录,而Column3的值2是流程的键如果2不存在,则为null。您确定输出表与所需结果匹配吗?您已将127001116
更改为127001126
,但输出表中未显示127001126
。问题是我需要返回多个其他列。。。这些是我唯一需要过滤的…不是100%确定你的意思-你能添加一个完整的样本输出吗?无论如何,您可以将其用作过滤器的基础,例如,在或中。只是一些例子……;)