Udostępnij za pośrednictwem


Obracanie tabeli w programie SQL Server

W tym artykule opisano sposób obracania tabeli w programie SQL Server.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 175574

Podsumowanie

W tym artykule opisano sposób obracania tabeli programu SQL Server. Załóżmy, że masz tabelę o nazwie QTRSALES. Tabela zawiera kolumny YEAR, QUARTERi AMOUNT z danymi w następującym formacie.

Uwaga 16.

W czwartym kwartale 1996 r. nie ma wiersza:

Year (Rok) Ćwiartkowy Kwota
1995 1 125,000.90
1995 2 136,000.75
1995 3 212,000.34
1995 100 328,000.82
1996 3 728,000.35
1996 2 422,000.13
1996 1 328,000.82

Teraz załóżmy, że chcesz obrócić tabelę, aby wyświetlić dane w następującym formacie:

YEAR Q1 Q2 P3 P4
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

Zapytanie używane do obracania tabeli znajduje się w następnej sekcji tego artykułu.

Przykładowe zapytanie do obracania tabeli

Oto zapytanie, którego można użyć do rotacji tabeli:

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

Wykonywanie zapytań dotyczących dużych tabel

W przypadku dużych tabel to zapytanie będzie szybsze:

SELECT 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 Q4
FROM qtrsales q
GROUP BY YEAR

Odwołanie

FROM — używanie elementu PIVOT i UNPIVOT