【发布时间】:2018-05-06 16:07:57
【问题描述】:
我有一个包含重复行的表,我如何将该重复行求和为不同的值?我知道我可以将不同的数据插入新表并以这种方式求和,但我试图避免创建任何类型的表。 表:
SELECT '123' DateID,'8' HOUR,'6000' AMT, '20150801' PayEndingDate, '20150807' CheckDate
INTO #DATA
UNION ALL
SELECT '456',8,'6000','20150801','20150807' UNION ALL
SELECT '789',8,'6000','20150801','20150807' UNION ALL --DUP ROW
SELECT '789',8,'6000','20150801','20150807' UNION ALL --DUP ROW
SELECT '987',8,'6000','20150725','20150807' UNION ALL
SELECT '654',8,'6000','20150725','20150807' UNION ALL
SELECT '321',8,'6000','20150725','20150807' UNION ALL --DUP ROW
SELECT '321',8,'6000','20150725','20150807' --DUP ROW
SELECT * FROM #DATA
|DateID | HOUR | AMT | PayEndingDate | CheckDate
123 8 6000 20150801 20150807
456 8 6000 20150801 20150807
789 8 6000 20150801 20150807
789 8 6000 20150801 20150807
987 8 6000 20150725 20150807
654 8 6000 20150725 20150807
321 8 6000 20150725 20150807
321 8 6000 20150725 20150807
SELECT DISTINCT SUM(HOUR) AS HOURS, AMT, PayEndingDate, CHECKDATE
FROM #DATA
GROUP BY AMT,PayEndingDate,CHECKDATE
| HOUR | AMT | PayEndingDate | CheckDate
32 6000 20150725 20150807
32 6000 20150801 20150807
如您所见,ID 321 和 789 重复,导致小时数为 32 而应为 24。在 SUM 中添加 distinct 仅返回 8。在这种情况下如何避免重复?
【问题讨论】:
-
你为什么不对
AMT求和? -
不需要
SELECT DISTINCT,因为GROUP BY不会返回重复的行。
标签: sql sql-server sum duplicates