Database
 sql >> Baza danych >  >> RDS >> Database

SQL Pivot – Dowiedz się, jak konwertować wiersze na kolumny

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Stosunki pryzmatyczne

  2. KLUCZ OBCY SQL

  3. Dopasowywanie wzorów:więcej zabawy, gdy byłem dzieckiem

  4. Wysyłanie danych SentryOne do kalkulatora jednostek DTU bazy danych SQL Azure

  5. Jak zamawiać według liczby w SQL?