Exemplu
Clauza PIVOT poate fi utilizată în SQL Server (Transact-SQL).
Să vedem un exemplu. Dacă am avea un tabel al angajaților care conține următoarele date:
prenumele | prenumele | salariu | dept_id | |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Gates | Steve | 65000 | 30 |
Și am rulat următoarea instrucțiune SQL care creează un tabulat încrucișat la interogare folosind clauza PIVOT:
Ar returna următorul rezultat:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
Acest exemplu ar crea un tabel pivot pentru a afișa salariul total pentru dept_id 30 și dept_id 45. Rezultatele sunt afișate într-un rând, cele două departamente apar fiecare în propria coloană.
Acum, să separăm clauza PIVOT și să explicăm cum a funcționat.
Specificați coloane în rezultatele tabelelor încrucișate
Mai întâi, dorim să specificăm ce câmpuri să includem în rezultatele noastre de tabelare încrucișată. În acest exemplu, dorim să includem valoarea literală „TotalSalary” ca prima coloană din tabelul pivot. Și dorim să creăm o coloană pentru dept_id 30 și o a doua coloană pentru dept_id 45. Aceasta ne oferă 3 coloane în tabelul nostru pivot.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Specificați sursa Date tabelă
În continuare, trebuie să specificăm o declarație SELECT care să returneze datele sursă pentru tabelul pivot.
În acest exemplu, dorim să returnăm valorile dept_id și salariul din tabelul angajaților:
(SELECT dept_id, salary FROM employees) AS SourceTable
Trebuie să specificați un alias pentru interogarea sursă. În acest exemplu, am aliasat interogarea ca SourceTable.
Specificați funcția agregată
Apoi, trebuie să specificăm ce funcție agregată să utilizați atunci când ne creați interogarea de tabelare încrucișată. Puteți utiliza orice agregat, cum ar fi funcțiile SUM, COUNT, MIN, MAX sau AVG.
În acest exemplu, vom folosi funcția SUM. Aceasta va însuma valorile salariului:
PIVOT(SUM(salary)
Specificați valorile pivot
În cele din urmă, trebuie să specificăm ce valori pivot să includem în rezultatele noastre . Acestea vor fi utilizate ca titluri de coloană în interogarea noastră de tabele încrucișate.
În acest exemplu, vom returna doar valorile dept_id de 30 și 45. Aceste valori vor deveni titlurile noastre de coloană din pivotul nostru masa. De asemenea, rețineți că aceste valori sunt o listă finită a valorilor dept_id și nu vor conține neapărat toate valorile posibile.
FOR dept_id IN (, )
Acum, când le punem pe toate, obținem următorul tabel pivot:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |