Så här roterar du en tabell i SQL Server


Sammanfattning


I den här artikeln beskrivs hur du roterar en SQL Server-tabell. Anta att du har en tabell med namnet QTRSALES. Tabellen innehåller kolumnerna ÅRTAL, kvartal och belopp med data i följande format (Observera att det inte finns någon rad för det fjärde kvartalet 1996):
   Year     Quarter     Amount   -------------------------------   1995     1           125,000.90   1995     2           136,000.75   1995     3           212,000.34   1995     4           328,000.82   1996     3           728,000.35   1996     2           422,000.13   1996     1           328,000.82 
Anta att du vill rotera tabellen så att du kan se data i följande format:
   YEAR        Q1              Q2              Q3              Q4   -------------------------------------------------------------------   1995     125,000.90      136,000.75      212,000.34      328,000.82   1996     328,000.82      422,000.13      728,000.35            0.00 
Frågan som du vill använda för att rotera tabellen finns i nästa avsnitt i den här artikeln.

Exempel fråga för att rotera tabellen

Här är den fråga som du vill använda för att rotera tabellen:
SELECT YEAR,       Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =  Q.YEAR),0),       Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =  Q.YEAR),0),       Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =  Q.YEAR),0),       Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =  Q.YEAR),0)     FROM QTRSALES Q     GROUP BY YEAR

Fråga för stora tabeller

För stora tabeller blir den här frågan snabbare:
year=q.year,SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) as Q1,SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) as Q2,SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) as Q3,SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) as Q4FROM qtrsales qGROUP BY year