2016-06-02 3 views
0

Ich versuche, eine Abfrage (Zweck: manuelle DB-Tests) zu erstellen, die die Zeilen des vorherigen/aktuellen/nächsten Geschäftsjahres und dann die SUM (Umsatz)Daten für Geschäftsjahr aus Tabelle ohne Datum Spalten

erhalten würde

Bei

(1) der unten stehenden Tabelle,

und

(2) Geschäftsjahr (FY) = MÄRZ-Februar

Wenn Zurück FY - Dann 2 Reihen: 2016/1 bis 2016/2

Wenn Aktuelle FY - Dann 12 Reihen: von 2016/3 bis 2017/2 (Jahr/Monat)

Wenn Zukunft FY - Dann 1 Reihe: 2017/3

+--------------+---------------+----------+ 
| Year (num) | Month (num) | Turnover | 
+--------------+---------------+----------+ 
| 2016   |  1   | 1000 | 
+--------------+---------------+----------+ 
| 2016   |  2   | 2000 | 
+--------------+---------------+----------+ 
| 2016   |  3   | 3000 | 
+--------------+---------------+----------+ 
| 2016   |  4   | 4000 | 
+--------------+---------------+----------+ 
| 2016   |  5   | 2000 | 
+--------------+---------------+----------+ 
| 2016   |  6   | 1000 | 
+--------------+---------------+----------+ 
| 2016   |  7   | 2000 | 
+--------------+---------------+----------+ 
| 2016   |  8   | 1000 | 
+--------------+---------------+----------+ 
| 2016   |  9   | 2000 | 
+--------------+---------------+----------+ 
| 2016   |  10  | 3000 | 
+--------------+---------------+----------+ 
| 2016   |  11  | 4000 | 
+--------------+---------------+----------+ 
| 2016   |  12  | 5000 | 
+--------------+---------------+----------+ 
| 2017   |  1   | 6000 | 
+--------------+---------------+----------+ 
| 2017   |  2   | 2000 | 
+--------------+---------------+----------+ 
| 2017   |  3   | 1000 | 
+--------------+---------------+----------+ 

Die beste Lösung, die ich gefunden habe, ist die folgende Abfrage und ändern Sie die Werte, um zwischen Jahren zu wechseln. Es fühlt sich hacky an, weil ich eine extra Lösung mit sysdate erstellt habe und nach NOT NULL suche. Gibt es einen eleganteren Weg?

WITH CTE AS (

SELECT 
CASE 
WHEN Month BETWEEN 3 AND 12 AND Year = 2016            
THEN sysdate 
WHEN Month BETWEEN 1 AND 2 AND Year = 2017 
THEN sysdate 
END case_statement_date, 

year, month, turnover, FROM Table 

) 

SELECT sum(turnover) FROM CTE 
WHERE case_statement_date IS NOT NULL 
; 
+0

Bearbeiten Sie Ihre Frage und liefern Sie Beispieldaten und gewünschte Ergebnisse. –

+0

Hast du die Frage überhaupt gelesen? Beispieldaten = diese große Tabelle in der Mitte. Gewünschte Ergebnisse: Wann - Dann. – Andrejs

Antwort

3

Ist das, was Sie wollen?

select year + (case when month >= 3 then 0 else -1 end) as fiscal_year, 
     sum(turnover) 
from t 
group by year + (case when month >= 3 then 0 else -1 end) ; 
+0

Fast, Summe (Umsatz) statt zählen (*). Danke, wird als richtige Antwort akzeptieren, wenn es möglich wird. – Andrejs

Verwandte Themen