SQL Server:查找并删除表中的重复项

时间:2015-10-23 01:50:42

标签: sql-server duplicates

我不熟悉SQL编程,我知道之前有关于删除重复的帖子,但这有点复杂,我还没有在网上找到解决方案。

要求:我有一个表Positions,其中包含ABCtotaldate列。

  • 仅当A, B, C的值全部匹配时,才会将两行视为重复。
  • 找到重复后,选择date 为空的行,并通过总结total来更新该行的total值所有重复行;
  • 删除除上述步骤中选择的行之外的其他副本。

所选的SQL是SQL Server。

请帮忙。约翰

3 个答案:

答案 0 :(得分:0)

可以尝试以下方式更新表格。

update POSITIONS as a
set total = (select sum(total) from positions as b 
where a.col1 = b.col1 
and a.col2 = b.col2 
and a.col3 = b.col3)
WHERE a.date is not null 

如果您不希望将包含日期的行总数包含在总和中,则必须相应地调整查询。

我们提出了以下 假设 ,因为您的问题不是很明确。

1)只有一行非空日期 2)如果所有可用日期都为空,则无需更新

下次,尝试尽可能多地提供您的问题信息,以便我们更好地指导。

问候。

答案 1 :(得分:0)

首先,您计算SUM总值Group by A,B,C Where date not null

然后,你update total = SUM (calculated step one)

最后,你select DISTINCT A,B,C,total

试试这段代码:

UPDATE POSITIONS AS P
SET total = (SELECT SUM(total)
             FROM POSITIONS
             WHERE A = P.A
               AND B = P.B
               AND C = P.C)
WHERE date IS NOT NULL

SELECT DISTINCT A,B,C,total
FROM POSITIONS
WHERE date IS NOT NULL

答案 2 :(得分:0)

{{1}}