FROM – PIVOTin ja UNPIVOTin käyttäminen
- 14.10.2019
- 5 minuuttia aikaa lukea
-
- V
- c
- M
- i
- M
-
+7
Koskee: SQL Server (kaikki tuetut versiot) Azure SQL -tietokanta Azure SQL -hallittu ilmentymä Azure Synapse Analytics Rinnakkaistietovarasto
Voit käyttää PIVOT
ja UNPIVOT
relaatio-operaattoreita muuta taulukon arvoinen lauseke toiseen taulukkoon. PIVOT
kiertää taulukkoarvoista lauseketta muuttamalla lausekkeen yhden sarakkeen yksilölliset arvot useiksi sarakkeiksi lähdössä. Ja PIVOT
suorittaa aggregaatit, joissa niitä vaaditaan jäljellä oleville sarakearvoille, jotka halutaan lopulliseen tulokseen. UNPIVOT
suorittaa päinvastaisen toiminnan PIVOT-muotoon kiertämällä taulukon arvoisen lausekkeen sarakkeet sarakearvoiksi.
PIVOT
-sarjan syntaksin on yksinkertaisempi ja helpommin luettavissa kuin syntaksin, joka muuten voi olla määritetty monimutkaisessa sarjassa SELECT...CASE
-lausekkeita. PIVOT
-syntaksin täydellinen kuvaus on artikkelissa FROM (Transact-SQL).
Syntaksi
Seuraava syntaksissa on yhteenveto PIVOT
-operaattorin käytöstä.
Huomautuksia
Lausekkeen UNPIVOT
saraketunnisteet seuraavat luetteloluetteloa. SQL-tietokannassa lajittelu on aina SQL_Latin1_General_CP1_CI_AS
. SQL Server sisältää osittain tietokannoissa, lajittelu on aina Latin1_General_100_CI_AS_KS_WS_SC
. Jos sarake on yhdistetty eds muiden sarakkeiden kanssa, silloin ristiriitojen välttämiseksi tarvitaan lajittelulauseke (COLLATE DATABASE_DEFAULT
).
PIVOT-perusesimerkki
Seuraava esimerkki tuottaa kahden sarakkeen taulukon, jossa on neljä riviä.
Tässä on tulosjoukko.
Tuotteita ei ole määritelty kolmella DaysToManufacture
.
Seuraava koodi näyttää saman tuloksen, joka on käännetty siten, että DaysToManufacture
arvoista tulee sarakeotsikot. Sarake on käytettävissä kolmen päivän ajan, vaikka tulokset olisivat
NULL
.
Tässä on tulosjoukko .
Monimutkainen PIVOT-esimerkki
Yleinen skenaario, jossa PIVOT
voi olla hyödyllinen, on kun haluat luoda taulukoiden väliset raportit yhteenvedon antamiseksi tiedoista. Oletetaan esimerkiksi, että haluat kysyä PurchaseOrderHeader
-taulukosta AdventureWorks2014
-näytetietokannassa tiettyjen työntekijöiden tekemien ostotilausten määrän määrittämiseksi. Seuraava kysely antaa tämän toimittajan järjestämän raportin.
Tässä on osittainen tulosjoukko.
Tämän alavalinnan palauttamat tulokset lause on käännetty EmployeeID
-sarakkeeseen.
-sarakkeesta tulee kenttiä lopullisessa tulosjoukossa. Sellaisena ”sarake kutakin pivot-lausekkeessa määritettyä EmployeeID
-numeroa varten: tässä tapauksessa työntekijät 250
, 251
, 256
, 257
ja 260
. PurchaseOrderID
-sarake toimii arvosarakkeena, jota vastaan lopullisessa tuotoksessa palautetut sarakkeet, joita kutsutaan ryhmittelysarakkeiksi, ryhmitellään. Tällöin ryhmittelysarakkeet kootaan COUNT
-funktio. Huomaa, että näkyviin tulee varoitusviesti, joka ilmoittaa, että PurchaseOrderID
-sarakkeessa esiintyviä nolla-arvoja ei oteta huomioon laskettaessa COUNT
jokaiselle työntekijälle.
Tärkeää
Kun aggregaattitoimintoja käytetään PIVOT
, minkään nolla-arvon esiintymistä arvosarakkeessa ei oteta huomioon laskettaessa aggregaatiota.
UNPIVOT-esimerkki
UNPIVOT
suorittaa melkein käänteisen PIVOT
-operaation kiertämällä sarakkeita riveiksi. Oletetaan, että edellisessä esimerkissä tuotettu taulukko on tallennettu tietokantaan nimellä pvt
ja haluat kiertää saraketunnisteita Emp1
, Emp2
, Emp3
, Emp4
ja Emp5
riviarvoiksi, jotka vastaavat tiettyä myyjää. Sinänsä sinun on tunnistettava kaksi lisäsaraketta.Saraketta, joka sisältää uudelleenkierrettävät sarakearvot (Emp1
, Emp2
, …), kutsutaan nimellä Employee
, ja saraketta, joka pitää sisällään kiertyvien sarakkeiden alla tällä hetkellä olevat arvot, kutsutaan Orders
. Nämä sarakkeet vastaavat saraketta sarake ja arvo_sarake vastaavasti Transact-SQL-määritelmässä. Tässä on kysely.
Tässä on osittainen tulosjoukko.
Huomaa, että UNPIVOT
ei ole PIVOT
: n täsmällinen käänteinen suunta. PIVOT
suorittaa aggregaation ja yhdistää mahdolliset useita rivejä yhdeksi riviksi lähdössä. UNPIVOT
ei toista taulukon alkuperäisen lausekkeen tulosta, koska rivit on yhdistetty. Myös UNPIVOT
-syötteen tyhjät arvot häviävät Kun arvot häviävät, se osoittaa, että syötteessä saattaa olla alkuperäisiä nolla-arvoja ennen operaatiota PIVOT
.
Sales.vSalesPersonSalesByFiscalYears
-näkymä AdventureWorks2012-näytetietokannassa käyttää PIVOT
-palautetta palauttamaan jokaisen myyjän kokonaismyynnin kullekin tilikaudelle. Komentosarjanäkymä SQL Server Management Studiossa Etsi Object Explorerissa näkymä AdventureWorks2012-tietokannan Näkymät-kansiosta. Napsauta näkymän nimeä hiiren kakkospainikkeella ja valitse sitten Komentosarjanäkymä nimellä.
Katso myös
FROM (Transact -SQL)
CASE (Transact-SQL)