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)

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *