2016-04-15 12 views
0

Ich habe eine Tabelle namens SOITEM. In dieser Tabelle muss die Spalte TOTALPRICE summiert werden und den Gesamtumsatz pro Monat ergeben, wobei die Spalte mit den Daten als DATELASTFULFILLMENT bezeichnet wird. Ich möchte Verkaufsformular Jan 2014 mit Jan 2015 vergleichen, dann Feb 2014 mit Feb 2015 und so weiter.Wie summiere ich den Umsatz nach Monaten und vergleiche sie

Ich habe das bisher, aber ich bin mir nicht sicher, wie es weiter geht.

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

aber es führt nur in Summen von Januar 2014 .... Danke.

+1

eine Möglichkeit, die Daten mit PIVOT zu sehen http://sqlfiddle.com/#!3/fe629/2 – JamieD77

Antwort

2

Sie in Erwägung ziehen könnte Ihre Ergebnisse Gruppierung den Monat/Jahr ab Ihrem Feld und anschließend mit dem SUM() für jede dieser Gruppen Berechnung:

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] 

Sie können see an interactive example of this here und Ergebnisse unten gezeigt:

enter image description here

0

Dies funktioniert für MySQL. Ich nehme an, sollte für MS SQL das gleiche sein.

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

eine verschachtelte Abfrage in Ihrer SELECT-Anweisung verwenden - beachten Sie die subt raction aus dem Jahr innerhalb der verschachtelten Abfrage Vorjahres Zusammenfassung zurück zu ziehen:

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

Oder Sie es so tun könnten.

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 

Sie erste Gruppe die auf themonth Datum basiert Ergebnisse wandelt die Berechnung ein Datum zum 1. des Monats das Datum in fällt. Wir haben dann diese Ergebnisse nutzen und kommen zurück, um es auch im vergangenen Jahr zur Folge haben bekommen.

Verwandte Themen