Kaip pasukti lentelę "SQL Server"


Suvestinė


Šiame straipsnyje aprašyta, kaip pasukti SQL serverio lentelę. Tarkime, kad turite lentelę, pavadintą Qtrsales. Lentelė turi stulpelių metus, ketvirtį ir sumą su duomenimis šiuo formatu (Pastaba, kad ketvirtajame 1996 ketvirčiui nėra eilutės):
   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 
Dabar tarkime, kad norite pasukti lentelę, kad galėtumėte matyti duomenis šiuo formatu:
   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 
Užklausa, kurią naudosite lentelei pasukti, yra paskesniame šio straipsnio skyriuje.

Užklausos pavyzdys, kad būtų pasukta lentelė

Štai užklausa, kurią naudosite Norėdami pasukti lentelę:
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

Didelėms lentelėms skirta užklausa

Didelėms lentelėms ši užklausa bus greitesnė:
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