2017-03-17 107 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)