Voorbeeld
De PIVOT-clausule kan worden gebruikt in SQL Server (Transact-SQL).
Laten we eens kijken een voorbeeld. Als we een werknemerstabel hadden die de volgende gegevens bevatte:
medewerker_nummer | achternaam | voornaam | salaris | dienst_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 |
En we hebben de volgende SQL-instructie uitgevoerd die een kruistabel creëert op query met behulp van de PIVOT-clausule:
Het zou het volgende resultaat opleveren:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
In dit voorbeeld zou een draaitabel worden gemaakt om het totale salaris voor afdeling_id 30 en afdeling_id 45 weer te geven. De resultaten worden in één rij weergegeven, waarbij de twee afdelingen verschijnen elk in hun eigen kolom.
Laten we nu de PIVOT-clausule uit elkaar halen en uitleggen hoe het werkte.
Specificeer kolommen in kruistabelresultaten
Ten eerste willen we specificeren welke velden in onze kruistabelresultaten moeten worden opgenomen. In dit voorbeeld willen we de letterlijke waarde “TotalSalary” opnemen als de eerste kolom in de draaitabel. En we willen een kolom maken voor afd_id 30 en een tweede kolom voor afd_id 45. Dit geeft ons 3 kolommen in onze draaitabel.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Specificeer de bron Tabelgegevens
Vervolgens moeten we een SELECT-instructie specificeren die de brongegevens voor de draaitabel retourneert.
In dit voorbeeld willen we de afdelings-id en salariswaarden retourneren van de werknemerstabel:
(SELECT dept_id, salary FROM employees) AS SourceTable
Je moet een alias specificeren voor de bronquery. In dit voorbeeld hebben we de query als SourceTable gealiast.
Specify Aggregate Function
Vervolgens moeten we specificeren welke aggregatiefunctie moet worden gebruikt bij het maken van onze kruistabelquery. U kunt elk aggregaat gebruiken, zoals SUM-, COUNT-, MIN-, MAX- of AVG-functies.
In dit voorbeeld gaan we de SUM-functie gebruiken. Dit zal de salariswaarden optellen:
PIVOT(SUM(salary)
Specificeer spilwaarden
Ten slotte moeten we specificeren welke spilwaarden in onze resultaten moeten worden opgenomen . Deze worden gebruikt als kolomkoppen in onze kruistabelquery.
In dit voorbeeld retourneren we alleen de afd_id-waarden van 30 en 45. Deze waarden worden onze kolomkoppen in ons draaipunt tafel. Merk ook op dat deze waarden een eindige lijst zijn van de afdelings-id-waarden en niet noodzakelijk alle mogelijke waarden zullen bevatten.
FOR dept_id IN (, )
Als we het nu allemaal samenvoegen, we krijgen de volgende draaitabel:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |