SQL SUM AND 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从何而来?

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

您必须将查询更改为类似

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( 对其进行分组

最新更新