首页 文章

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

提问于
浏览
0

我有一张名为SOITEM的 table . 在该表中,必须对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

    您可以考虑使用日期字段中的月/年对结果进行分组,然后使用每个组计算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

  • 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'
    
  • 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)
    
  • 2

    或者你可以这样做 .

    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天 . 然后我们使用这些结果并加入回到它,以获得去年的结果 .

相关问题