sql >> Databáze >  >> RDS >> Database

SQL Pivot – Vědět, jak převést řádky na sloupce

Relační databáze ukládají obrovské množství dat ve formě tabulek. Tyto tabulky mohou mít libovolný počet řádků a sloupců. Ale co kdybyste museli změnit data na úrovni řádků na sloupcová data? V tomto článku o SQL Pivot vám ukážu, jak můžete převést řádky na sloupec na serveru SQL.

Tento článek se bude zabývat následujícími tématy:

  • Co je PIVOT v SQL?
  • Syntaxe
  • Příklad
  • Fungování doložky PIVOT
  • SQL UNPIVOT

Co je PIVOT v SQL?

PIVOT se používá k otočení hodnoty tabulky převodem jedinečných hodnot jednoho sloupce na více sloupců. Používá se k otočení řádků na hodnoty sloupců a v případě potřeby spouští agregace na zbývajících hodnotách sloupců.

UNPIVOT se na druhé straně používá k provádění opačných operací. Používá se tedy k převodu sloupců konkrétní tabulky na hodnoty sloupců.

V tomto článku budeme pokračovat, abychom pochopili syntaxi SQL Pivot.

Syntaxe:

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];

Zde můžete také použít klauzuli ORDER BY k seřazení hodnot ve vzestupném nebo sestupném pořadí. Nyní, když víte, co je PIVOT v SQL a jeho základní syntaxi, pojďme se posunout vpřed a uvidíme, jak jej používat.

Příklady

Pro vaše lepší pochopení vysvětlím všechny příklady pomocí následující tabulky.

Tabulka dodavatelů:

ID dodavatele Dny výroby Cena Číslo zákazníka ID nákupu
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

Pojďme napsat jednoduchý dotaz, abychom získali průměrné náklady vynaložené každým zákazníkem.

SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer   
FROM Suppliers  
GROUP BY CustomerID;  

Výstup:

Číslo zákazníka Průměrné náklady zákazníka
11 1787,75
22 4654
33 5238,33

Nyní řekněme, že chceme otočit výše uvedenou tabulku. Zde se hodnoty sloupce CustomerID stanou záhlavími sloupců.


-- 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;

Výstup:

Cost_According_To_Customers 11 22 33
Průměrné náklady zákazníka 1787,75 4654 5238,33

Poznámka: Když používáte agregační funkce s PIVOT, hodnoty null se při výpočtu agregace neberou v úvahu.

To byl základní příklad, ale nyní pochopíme, jak fungovala klauzule PIVOT.

Fungování klauzule PIVOT

Jak můžete vidět výše, pro vytvoření PIVOT TABULKY musíte postupovat podle následujících kroků:

  • Vyberte sloupce pro otáčení
  • Potom vyberte zdrojovou tabulku.
  • Použijte operátor PIVOT a poté použijte agregační funkce.
  • Uveďte klíčové hodnoty.

Vyberte sloupce pro otočení

Zpočátku musíme specifikovat pole, která budou zahrnuta do našich výsledků. V našem příkladu jsem uvažoval sloupec Průměrná cena zákazníka v kontingenční tabulce. Poté jsme vytvořili tři další sloupce se záhlavími sloupců 11, 22 a 33. Příklad-

SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]

Vyberte zdrojovou tabulku

Dále musíte zadat příkaz SELECT, který vrátí zdrojová data pro kontingenční tabulku. V našem příkladu vracíme CustomerID a Cost z tabulky Dodavatelé.

(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable

Použijte operátor PIVOT a poté použijte agregační funkce

Dále musíte určit agregační funkci, která se má použít při vytváření kontingenční tabulky. V našem příkladu jsem pro výpočet průměrných nákladů použil funkci AVG.

PIVOT ( AVG(Cost)

Uveďte klíčové hodnoty

Nakonec musíte zmínit hodnoty, které musí být zahrnuty do výsledné kontingenční tabulky. Tyto hodnoty budou použity jako záhlaví sloupců v kontingenční tabulce.

FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;

Takto fungují operátoři PIVOT. V tomto článku o SQL PIVOT dále pochopme, jak se liší od SQL UNPIVOT.

SQL UNPIVOT

Operátor SQL UNPIVOT se používá k provedení opačné operace, než je operace PIVOT. Používá se k rotaci dat sloupců na data na úrovni řádků. Syntaxe UNPIVOT je podobná syntaxi PIVOT. Jediný rozdíl je v tom, že musíte použít klíčové slovo SQL „UNPIVOT“ .

Příklad:

Vytvořme tabulku se sloupci SupplierID, AAA, BBB a CCC. Vložte také několik hodnot.

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  

Výstup:

ID dodavatele AAA BBB CCC
1 3 5 6
2 9 2 8
3 8 1 7

Nyní, řekněme, chceme odklopit tabulku. Chcete-li to provést, můžete použít následující kód:

SELECT SupplierID, Customers, Products
FROM
(SELECT SupplierD, AAA, BBB, CCC
FROM sampletable) p
UNPIVOT
(Products FOR Customers IN
(AAA, BBB, CCC)
)AS example;
GO
ID dodavatele Zákazníci 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

Takto můžete použít SQL PIVOT a UNPIVOT. Tímto se dostáváme ke konci tohoto článku. Doufám, že jste pochopili, jak používat SQL. Pokud se chcete dozvědět více o MySQL a seznámit se s touto relační databází s otevřeným zdrojovým kódem, podívejte se na naše certifikační školení MySQL DBA který přichází s instruktorem vedeným živým školením a reálnými zkušenostmi z projektů. Toto školení vám pomůže porozumět MySQL do hloubky a pomůže vám dosáhnout zvládnutí tohoto předmětu.

Máte na nás otázku? Zmiňte to prosím v sekci komentářů k tomuto článku o SQL Pivot a já se vám ozvu.


  1. Vytvořte tabulku v postupu

  2. Jak navrhnout systém připravený na lokalizaci

  3. Závažná chyba:Volání členské funkce bind_param() na boolean

  4. DATE_ADD() Příklady – MySQL