2017-03-17 239 views
-1

以下设置:SQL SUM和GROUP BY(MS SQL)

PredDate     WtSumLoc 
2017-02-16 00:00:00.000  1360.139000 
2017-02-16 00:00:00.000  399.444000 
2017-02-28 00:00:00.000  400.000000 
2017-02-28 00:00:00.000  8231.046000 
2017-02-28 00:00:00.000  400.000000 
2017-03-01 00:00:00.000  1118.055000 
2017-04-15 00:00:00.000  400.000000 
2017-04-15 00:00:00.000  2488.699000 
2017-04-28 00:00:00.000  1555.556000 
2017-04-28 00:00:00.000  1555.252000 
2017-06-30 00:00:00.000  432.704000 

我试图总结和集团通过这个表做:

SELECT 

MONTH(PredDate) 'Month', 
sum(WtSumLoc) as 'sum' 

FROM Table 

GROUP BY PredDate 
ORDER BY Month 

,我得到以下结果:

Month sum 
2  1759.583000 
2  9031.046000 
3  1118.055000 
4  2888.699000 
4  40.000000 
4  3110.808000 
6  432.704000 

为什么这些不分组? 40.000从哪里来?

回答

0

由于您按日期进行分组,因此会收到不同日期,但会输出这些日期的月份 - 因此,对于同一月份中的两个不同日期,您将收到两个不同的记录。

你必须改变你的查询像

SELECT 

MONTH(PredDate) 'Month', 
sum(WtSumLoc) as 'sum' 

FROM Table 

GROUP BY MONTH(PredDate) 
ORDER BY Month 
0

ANSI SQL标准的解决方案是在派生表包住月提取部向上,并且GROUP BY它的结果:

select "Month", sum(WtSumLoc) as 'sum' 
from 
(
    SELECT MONTH(PredDate) 'Month', WtSumLoc 
    FROM Table 
) dt 
GROUP BY "Month" 
ORDER BY Month 

ANSI SQL使用双引号来界定标识符,例如"Month"。 SQL Server也支持方括号,如[Month]。单引号用于字符串文字。

0
SELECT 

MONTH(PredDate) 'Month', 
sum(WtSumLoc) as 'sum' 

FROM Table 

GROUP BY MONTH(PredDate) 
ORDER BY Month 

您还必须按月组是(PredDate)