如何消除所有列均为空的重复记录

时间:2018-07-18 03:24:00

标签: sql

我有一张桌子,我正在获取某些ID的重复记录。我需要删除基于ID的重复记录,并且具有条件,例如该ID的所有列均为空。如果这些列具有一定的价值,我需要保留该记录。但是某些ID的所有列均为空,但不重复。我需要保留这些记录。

我的输入表如下:

enter image description here

输出结果应如下所示:

enter image description here

2 个答案:

答案 0 :(得分:0)

首先,使用您提供的测试数据创建一个表:

CREATE TABLE SGR (ID INT, item_no INT, fee NUMERIC(10,2))
INSERT INTO SGR VALUES
(895, 110, 179.5), 
(895, NULL, NULL), 
(741, NULL, NULL), 
(2021, NULL, NULL), 
(2021, 116, 89.6), 
(768, NULL, NULL)

从表中删除item_no和Fee均为空的任何记录,并且表中还有另一行具有相同ID的字段,其中任一字段都不为空:

DELETE FROM SGR
WHERE item_no IS NULL AND fee IS NULL
AND EXISTS (SELECT * FROM SGR s WHERE id = sgr.ID AND (item_no IS NOT NULL OR fee IS NOT NULL))

然后在查询表时:

SELECT * FROM SGR

您得到了:

ID      item_no fee
895     110     179.50
741     NULL    NULL
2021    116     89.60
768     NULL    NULL

答案 1 :(得分:0)

使递归CTE具有order by和数字参考值。然后从CTE中删除记录。重复的行将从物理表中删除。