将所有日期分组为一个字段并显示销售总额

时间:2018-02-22 17:26:08

标签: sql sql-server

我已将表格中的所有日期转换为YYYY / MM / 01,但我剩下的25个左右的日期都是相同的,我只是想将它们组合在一起而且我不能弄清楚该怎么做。我对SQL很新,并希望有人能指出我正确的方向。

非常感谢!

SELECT 
        DATEFROMPARTS(YEAR(ReportedDate), MONTH(ReportedDate), 1) AS Date, SUM(Sales) Sales
FROM 
        dbo.Sales
WHERE 
        YEAR(ReportedDate) = 2018 AND MONTH(ReportedDate) = 01
GROUP BY
        ReportedDate

2 个答案:

答案 0 :(得分:0)

因为您按ReportedDate进行分组,所以即使您没有在SELECT子句中选择ReportedDate,也会为每个ReportedDate获取一条记录。将其视为数据中的隐藏列。相反,请尝试按select语句中的函数进行分组。

SELECT 
        DATEFROMPARTS(YEAR(ReportedDate), MONTH(ReportedDate), 1) AS Date, SUM(Sales) Sales
FROM 
        dbo.Sales
WHERE 
        YEAR(ReportedDate) = 2018 AND MONTH(ReportedDate) = 01
GROUP BY
        DATEFROMPARTS(YEAR(ReportedDate), MONTH(ReportedDate), 1)

答案 1 :(得分:0)

作为查询的替代方案,我建议您使用EOMONTH功能。您不需要使用额外的日期函数。而且我认为最好显示月份的最后一天比每月显示总数的第一天

SELECT 
    EOMONTH(ReportedDate) AS Date, SUM(Sales) Sales
FROM 
    dbo.Sales
WHERE 
    EOMONTH(ReportedDate) = EOMONTH(GETDATE(), -1)
GROUP BY
    EOMONTH(ReportedDate)

注意:

  1. EOMONTH(GETDATE(), -1)获得上个月的最后一天
  2. 使用DATEADD(DD, 1, EOMONTH(ReportedDate, -1))获取第一天的第一天