以下设置:
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从何而来?
因为您按日期分组,因此收到不同的日期,但输出这些日期的月份 - 因此对于同一月份的两个不同日期,您会收到两个不同的记录。
您必须将查询更改为类似
SELECT
MONTH(PredDate) 'Month',
sum(WtSumLoc) as 'sum'
FROM Table
GROUP BY MONTH(PredDate)
ORDER BY Month
符合 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]
。单引号用于字符串文本。
SELECT
MONTH(PredDate) 'Month',
sum(WtSumLoc) as 'sum'
FROM Table
GROUP BY MONTH(PredDate)
ORDER BY Month
您还必须按 MONTH(PredDate( 对其进行分组