如何按月计算销售额并进行比较

时间:2016-04-15 20:21:15

标签: sql sql-server

我有一张叫做SOITEM的桌子。在该表中,必须对TOTALPRICE列进行求和,并按月计算总销售额,其中带有日期的列称为DATELASTFULFILLMENT。 我想比较2014年1月到2015年1月,2014年2月和2015年2月等的销售形式。

到目前为止,我得到了这个,但我不确定如何继续。

Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-01-31' AND DATELASTFULFILLMENT<='2014-01-31' 

但它只会导致2014年1月的总数.... 谢谢。

4 个答案:

答案 0 :(得分:2)

您可以考虑使用日期字段中的月/年对结果进行分组,然后使用每个组计算SUM()

  SELECT DATEPART(Year, DATELASTFULFILLMENT) AS [Year], 
         DATEPART(Month, DATELASTFULFILLMENT) AS [Month], 
         SUM(TOTALPRICE) AS Total
    FROM SOITEM
GROUP BY DATEPART(Year, DATELASTFULFILLMENT), DATEPART(Month, DATELASTFULFILLMENT)
ORDER BY [Year], [Month]

您可以see an interactive example of this here,结果如下所示:

enter image description here

答案 1 :(得分:0)

这适用于MySQL。我假设MS SQL应该是相同的。

Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-01-31' AND DATELASTFULFILLMENT<='2014-01-31' 
UNION
Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2015-01-31' AND DATELASTFULFILLMENT<='2015-01-31' 
UNION
Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-02-31' AND DATELASTFULFILLMENT<='2014-02-31' 
UNION
Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-02-31' AND DATELASTFULFILLMENT<='2015-02-31' 

答案 2 :(得分:0)

在select语句中使用嵌套查询 - 注意嵌套查询中YEAR的减法以撤回上一年的摘要:

SELECT MONTH(so2.DATELASTFULFILLMENT) AS MonthFulfilled, 
YEAR(so2.DATELASTFULFILLMENT) AS YearFulfilled, 
SUM(so2.TOTALPRICE), 
(SELECT SUM(SOITEM.TOTALPRICE) FROM SOITEM WHERE MONTH(DATELASTFULFILLMENT) = MONTH(so2.DATELASTFULFILLMENT) AND YEAR(DATELASTFULFILLMENT) = (YEAR(so2.DATELASTFULFILLMENT)-1)) AS LastYearTotal
FROM SOITEM AS so2
GROUP BY MONTH(so2.DATELASTFULFILLMENT), YEAR(so2.DATELASTFULFILLMENT)

答案 3 :(得分:0)

或者你可以这样做。

WITH MonthTotal AS
(
    SELECT
        DATEADD(MONTH, DATEDIFF(MONTH, 0, DATELASTFULFILLMENT), 0) AS MonthDate
    ,   SUM(TOTALPRICE) AS Total

    FROM
        SOITEM

    GROUP BY
        DATEADD(MONTH, DATEDIFF(MONTH, 0, DATELASTFULFILLMENT), 0)
)

SELECT
    MonthTotal.MonthDate
,   MonthTotal.Total
,   PreviousYear.Total AS PreviousYearTotal

FROM
    MonthTotal
    LEFT JOIN MonthTotal AS PreviousYear
        ON  DATEADD(YEAR, -1, MonthTotal.MonthDate) = PreviousYear.MonthDatee) = PreviousYear.MonthDate

您首先根据月份日期对结果进行分组,计算会将日期转换为日期所在月份的第1天。然后,我们会使用这些结果并加入到它中,以获得去年的结果。