FROM – Utilizarea PIVOT și UNPIVOT
- 14/10/2019
- 5 minute de citit
-
- V
- c
- M
- i
- M
-
+7
Se aplică la: SQL Server (toate versiunile acceptate) Azure SQL Database Instanță administrată Azure SQL Azure Synapse Analytics Depozit de date paralele
Puteți utiliza operatorii relaționali PIVOT
și UNPIVOT
schimbați o expresie cu valoare de tabel într-un alt tabel. PIVOT
rotește o expresie cu valoare de tabel transformând valorile unice dintr-o coloană din expresie în mai multe coloane din ieșire. Și PIVOT
rulează agregări acolo unde sunt necesare pentru valorile de coloană rămase care sunt dorite în rezultatul final. UNPIVOT
efectuează operația opusă la PIVOT rotind coloanele unei expresii cu valoare de tabel în valori de coloană.
Sintaxa pentru PIVOT
oferă este mai simplă și mai lizibilă decât sintaxa care altfel specificat într-o serie complexă de instrucțiuni SELECT...CASE
. Pentru o descriere completă a sintaxei pentru PIVOT
, consultați FROM (Transact-SQL).
Sintaxă
Următoarea sintaxă rezumă modul de utilizare a operatorului PIVOT
.
Observații
Identificatorii de coloană din clauza UNPIVOT
urmează colaționarea catalogului. Pentru baza de date SQL, colaționarea este întotdeauna SQL_Latin1_General_CP1_CI_AS
. Pentru SQL Server conținut parțial bazele de date, colaționarea este întotdeauna Latin1_General_100_CI_AS_KS_WS_SC
. Dacă coloana este combinată editată cu alte coloane, apoi este necesară o clauză de asociere (COLLATE DATABASE_DEFAULT
) pentru a evita conflictele.
Exemplu de bază PIVOT
Următorul exemplu de cod produce un tabel cu două coloane care are patru rânduri.
Iată setul de rezultate.
Nu sunt definite produse cu trei DaysToManufacture
.
Următorul cod afișează același rezultat, pivotat astfel încât DaysToManufacture
valorile devin titlurile coloanei. O coloană este furnizată pentru trei zile, chiar dacă rezultatele sunt
NULL
.
Iată setul de rezultate .
Exemplu complex PIVOT
Un scenariu comun în care PIVOT
poate fi util este atunci când doriți să generați rapoarte de tabelare încrucișată pentru a oferi un rezumat al datelor. De exemplu, să presupunem că doriți să interogați tabelul PurchaseOrderHeader
din baza de date eșantion AdventureWorks2014
pentru a determina numărul de comenzi de cumpărare plasate de anumiți angajați. Următoarea interogare furnizează acest raport, comandat de furnizor.
Iată un set de rezultate parțiale.
Rezultatele returnate de acest subselect instrucțiunile sunt pivotate în coloana EmployeeID
.
Valorile unice returnate de devine câmpuri din setul de rezultate finale. Ca atare, există „o coloană pentru fiecare EmployeeID
număr specificat în clauza pivot: în acest caz angajații 250
, 251
, 256
, 257
și 260
. div id = „c36dcf6b3b”>
coloana servește drept coloană de valoare, împotriva căreia sunt grupate coloanele returnate în rezultatul final, care se numesc coloane de grupare. În acest caz, coloanele de grupare sunt agregate de COUNT
. Observați că apare un mesaj de avertizare care indică faptul că orice valori nule care apar în coloana PurchaseOrderID
nu au fost luate în considerare la calcularea COUNT
pentru fiecare angajat.
Important
Când funcțiile agregate sunt utilizate cu PIVOT
, prezența oricăror valori nule în coloana de valori nu sunt luate în considerare atunci când se calculează o agregare.
Exemplu UNPIVOT
UNPIVOT
efectuează aproape operația inversă a PIVOT
, prin rotirea coloanelor în rânduri. Să presupunem că tabelul produs în exemplul anterior este stocat în baza de date ca pvt
și doriți să rotiți identificatorii coloanei Emp1
, Emp2
, Emp3
, Emp4
și Emp5
în valori rând care corespund unui anumit furnizor. Ca atare, trebuie să identificați două coloane suplimentare.Coloana care va conține valorile coloanei pe care „le rotiți (Emp1
, Emp2
, …) va fi numită Employee
, iar coloana care va conține valorile care există în prezent sub coloanele care se rotesc va fi numită Orders
. Aceste coloane corespund coloanei pivot și coloanei valoare_ , respectiv, în definiția Transact-SQL. Iată interogarea.
Iată un set de rezultate parțiale.
Observați că UNPIVOT
nu este inversul exact al PIVOT
. PIVOT
efectuează o agregare și îmbină posibilele rânduri multiple într-un singur rând în ieșire. UNPIVOT
nu reproduce rezultatul expresiei valorii inițiale a tabelului, deoarece rândurile au fost îmbinate. De asemenea, valorile nule din intrarea UNPIVOT
dispar în ieșire. Când valorile dispar, arată că este posibil să fi existat valori nule originale în intrare înainte de operația PIVOT
.
Sales.vSalesPersonSalesByFiscalYears
în baza de date mostră AdventureWorks2012 utilizează PIVOT
pentru a returna vânzările totale pentru fiecare agent de vânzări, pentru fiecare an fiscal. Pentru a scripta vizualizarea în SQL Server Management Studio , în Object Explorer, găsiți vizualizarea sub folderul Vizualizări pentru baza de date AdventureWorks2012. Faceți clic dreapta pe numele vizualizării, apoi selectați Vizualizare script ca.
Consultați și
FROM (Transact -SQL)
CASE (Transact-SQL)