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)

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *