Relacyjne bazy danych przechowują ogromne ilości danych w postaci tabel. Tabele te mogą mieć dowolną liczbę wierszy i kolumn. Ale co by było, gdybyś musiał zmienić dane z poziomu wiersza na dane kolumnowe? Cóż, w tym artykule na temat SQL Pivot pokażę Ci, jak konwertować wiersze na kolumny w SQL Server.
W tym artykule zostaną omówione następujące tematy:
- Co to jest PIVOT w SQL?
- Składnia
- Przykład
- Praca klauzuli PIVOT
- SQL UNPIVOT
Co to jest PIVOT w SQL?
PIVOT służy do obracania wartości tabeli poprzez konwersję unikalnych wartości pojedynczej kolumny na wiele kolumn. Służy do obracania wierszy do wartości kolumn i w razie potrzeby uruchamia agregacje na pozostałych wartościach kolumn.
Z drugiej strony UNPIVOT służy do wykonywania przeciwnych operacji. Jest więc używany do konwersji kolumn określonej tabeli na wartości kolumn.
Przechodząc dalej w tym artykule, pozwól nam zrozumieć składnię SQL Pivot.
Składnia:
SELECT NonPivoted ColumnName, [First Pivoted ColumnName] AS ColumnName, [Second Pivoted ColumnName] AS ColumnName, [Third Pivoted ColumnName] AS ColumnName, ... [Last Pivoted ColumnName] AS ColumnName FROM (SELECT query which produces the data) AS [alias for the initial query] PIVOT ( [AggregationFunction](ColumName) FOR [ColumnName of the column whose values will become column headers] IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName], [Third Pivoted ColumnName] ... [last pivoted column]) ) AS [alias for the Pivot Table];
Tutaj możesz również użyć klauzuli ORDER BY, aby posortować wartości w porządku rosnącym lub malejącym. Teraz, gdy wiesz, czym jest PIVOT w SQL i jego podstawową składnię, przejdźmy dalej i zobaczmy, jak z niego korzystać.
Przykłady
Dla lepszego zrozumienia rozważę poniższą tabelę, aby wyjaśnić wszystkie przykłady.
Tabela dostawców:
Identyfikator dostawcy | Dni produkcji | Koszt | Identyfikator klienta | Identyfikator zakupu |
1 | 12 | 1230 | 11 | P1 |
2 | 21 | 1543 | 22 | P2 |
3 | 32 | 2345 | 11 | P3 |
4 | 14 | 8765 | 22 | P1 |
5 | 42 | 3452 | 33 | P3 |
6 | 31 | 5431 | 33 | P1 |
7 | 41 | 2342 | 11 | P2 |
8 | 54 | 3654 | 22 | P2 |
9 | 33 | 1234 | 11 | P3 |
10 | 56 | 6832 | 33 | P2 |
Napiszmy proste zapytanie, aby pobrać średni koszt poniesiony przez każdego klienta.
SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer FROM Suppliers GROUP BY CustomerID;
Wyjście:
Identyfikator klienta | Średni kosztklienta |
11 | 1787,75 |
22 | 4654 |
33 | 5238,33 |
Teraz powiedzmy, że chcemy obrócić powyższą tabelę. Tutaj wartości kolumn CustomerID staną się nagłówkami kolumn.
-- Create Pivot table with one row and three columns SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33] FROM (SELECT CustomerID, Cost FROM Suppliers) AS SourceTable PIVOT ( AVG(Cost) FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Wyjście:
Cost_According_To_Customers | 11 | 22 | 33 |
Średni koszt klienta | 1787,75 | 4654 | 5238,33 |
Uwaga: Gdy używasz funkcji agregujących z funkcją PIVOT, wartości null nie są brane pod uwagę podczas obliczania agregacji.
Cóż, to był podstawowy przykład, ale teraz zrozumiemy, jak działała klauzula PIVOT.
Praca klauzuli PIVOT
Jak możesz odnieść się powyżej, aby utworzyć TABELĘ PRZESTAWNĄ, musisz wykonać następujące kroki:
- Wybierz kolumny do obracania
- Następnie wybierz tabelę źródłową.
- Zastosuj operator PIVOT, a następnie użyj funkcji agregujących.
- Wspomnij o wartościach przestawnych.
Wybierz kolumny do obracania
Na początku musimy określić pola, które mają być uwzględnione w naszych wynikach. W naszym przykładzie wziąłem pod uwagę kolumnę AverageCostofCustomer w tabeli przestawnej. Następnie utworzyliśmy trzy inne kolumny z nagłówkami kolumn 11, 22 i 33. Przykład-
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]
Wybierz tabelę źródłową
Następnie musisz określić instrukcję SELECT, która zwróci dane źródłowe dla tabeli przestawnej. W naszym przykładzie zwracamy CustomerID i Cost z tabeli Suppliers.
(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable
Zastosuj operator PIVOT, a następnie użyj funkcji agregujących
Następnie musisz określić funkcję agregującą, która ma być używana podczas tworzenia tabeli przestawnej. W naszym przykładzie użyłem funkcji AVG do obliczenia średniego kosztu.
PIVOT ( AVG(Cost)
Wspomnij o wartościach przestawnych
Na koniec musisz wspomnieć o wartościach, które muszą być uwzględnione w wynikowej tabeli przestawnej. Te wartości będą używane jako nagłówki kolumn w tabeli przestawnej.
FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Tak działają operatory PIVOT. Kontynuując ten artykuł na temat SQL PIVOT, pozwól nam zrozumieć, jak różni się on od SQL UNPIVOT.
SQL UNPIVOT
Operator SQL UNPIVOT służy do wykonywania operacji odwrotnej do operacji PIVOT. Służy do obracania danych w kolumnie na dane na poziomie wiersza. Składnia UNPIVOT jest podobna do składni PIVOT. Jedyna różnica polega na tym, że musisz użyć słowa kluczowego SQL „UNPIVOT” .
Przykład:
Stwórzmy tabelę z kolumnami SupplierID, AAA, BBB i CCC. Wstaw także kilka wartości.
CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int); GO INSERT INTO sampletable VALUES (1,3,5,6); INSERT INTO sampletable VALUES (2,9,2,8); INSERT INTO sampletable VALUES (3,8,1,7); GO
Wyjście:
Identyfikator dostawcy | AAA | BBB | CCC |
1 | 3 | 5 | 6 |
2 | 9 | 2 | 8 |
3 | 8 | 1 | 7 |
Teraz powiedzmy, że chcemy odwrócić tabelę. Aby to zrobić, możesz odwołać się do następującego kodu:
SELECT SupplierID, Customers, Products FROM (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC) )AS example; GO
Identyfikator dostawcy | Klienci | Produkty |
1 | AAA | 3 |
1 | BBB | 5 |
1 | CCC | 6 |
2 | AAA | 9 |
2 | BBB | 2 |
2 | CCC | 8 |
3 | AAA | 8 |
3 | BBB | 1 |
3 | CCC | 7 |
W ten sposób możesz używać SQL PIVOT i UNPIVOT. Na tym kończymy ten artykuł. Mam nadzieję, że zrozumiałeś, jak używać SQL. Jeśli chcesz dowiedzieć się więcej o MySQL i poznać tę relacyjną bazę danych typu open source, zapoznaj się z naszym Szkoleniem certyfikacyjnym MySQL DBA który jest dostarczany z prowadzonym przez instruktora szkoleniem na żywo i doświadczeniem w rzeczywistych projektach. To szkolenie pomoże ci dogłębnie zrozumieć MySQL i pomoże ci osiągnąć mistrzostwo w tym temacie.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy tego artykułu na temat SQL Pivot, a ja odezwę się do Ciebie.