2016-04-15 71 views
0

我有一張名爲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月... 謝謝。

+1

使用PIVOT查看數據的一種方法http://sqlfiddle.com/#!3/fe629/2 – JamieD77

回答

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

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語句中使用嵌套查詢 - 注意該子類從嵌套查詢中的年份起,可以撤回前一年的總結:

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) 
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 

您第一組基於themonth日期的結果,計算將日期轉換日期滴在每月的第一天。然後,我們使用這些結果,並加入回到它越來越近幾年導致爲好。

相關問題