SQLShack

I denne artikkelen vil vi gå gjennom SQL Pivot og SQL Unpivot operatorene og hvordan de kan være nyttige for å transponere SQL Server-data. Vi vil også diskutere både statiske og dynamiske måter å bruke PIVOT og UNPIVOT relasjonelle operatorer som kan brukes til å transformere aggregerte distinkte verdier som kolonne (r) i resultatsettet ved å angi alle kolonneverdiene I pivot I-setningsdelen.

SQL Server pivot Introduksjon

det er flere måter å transponere et datasett fra rader til kolonner og kolonner til rader. SQL Pivot ER en av teknikkene som gjør det mulig å transponere rader til kolonner og utfører mulige aggregeringer underveis. SQL PIVOT og SQL UNPIVOT relasjonelle operatører transponere en tabell-verdsatt todimensjonale data til en annen form for data. SQL PIVOT transponerer et tabellverdig uttrykk fra et unikt sett med verdier fra en kolonne til flere kolonner i utdataene og utfører aggregeringer. SQL UNPIVOT utfører den motsatte operasjonen AV SQL PIVOT ved å transformere kolonnene i et tabellverdig uttrykk til kolonneverdier.

i de fleste tilfeller er den statiske svingeteknikken tilstrekkelig forretningskravet. For eksempel den månedlige salgsprognosen, årlig salgsdeling, kvartalsvis salgsaggregering osv., der I-setnings-kolonnene forblir statiske. I noen andre tilfeller trenger vi granulære detaljer, og tabellverdiuttrykket er mer dynamisk i naturen, og hele tiden er nytt sett av uttrykket inkludert i tabellen, så vil dynamisk PIVOT være det beste valget.

Merk: i DEN ovennevnte avbildningen kan vi se at kolonneverdiene roteres fra vertikal til horisontal og UNPIVOTING er som å rotere den fra horisontal til vertikal.

Syntax

SELECT <non-pivoted column>,

AS <column alias>,

AS <column alias>,

AS <column alias>

FROM

(

<SELECT QUERY>)

AS <Alias for temporary data set>

PIVOT

(

<Aggregate function>( Aggregate column)

FOR

IN ( , ,

… )

) AS <Pivottabellalias>

< rekkefølge etter klausul>;

komme i gang med sql pivot

vi skal begynne med å dreie og un-pivotere dataene. Nå forstår du hva PIVOT og UNPIVOT operatører er I SQL Server. Enkelt sagt er det bare en annen måte å beskrive prosessen med å snu forskjellige radverdier i sine egne kolonner, kjent som Pivoting. Og prosessen med å snu kolonner i rader er kjent som en un-pivoting.

Eksempel 1: Slik utfører DU EN SQL Pivot-operasjon

La oss se eksemplet datasett avledet fra AdventureWorks2014-databasen. I dette tilfellet har du bare et enkelt datasett Med SalesYear-kolonnen langs Den ene kvantitative verdien TotalSales.

nå er datasettet klart for svinging. Du Har SalesYear i den første kolonnen, Totalsalg i den andre kolonnen. Hvis du blir bedt om å transponere dataene, må du ta hvert distinkt år i kolonnen, og disse kolonnene blir overskriften til pivotkolonnene. Så blir 2011 den første kolonnen, 2012 blir sin egen kolonne og så videre. De faktiske verdiene fra neste kolonne Totalsalg, de holder seg til pivot kolonneoverskriftene. Nå vil det svingbare bordet se ut nedenfor.

velg * fra
(
velg år(soh.OrderDate) som Salgsår,
SOH.Delsum som TotalSales
fra salg.SalesOrderHeader SOH
BLI med salg.SalesOrderDetail TORV PÅ SOH.SalesOrderId = TORV.Salgsorderid
) Som Salg
PIVOT (SUM(Totalsalg)

som PVT

1
2
3
4
5
6
7
8
9
10

følgende bilde viser inngangsdata, pivot syntaks, sql pivot, og utgang resultater.

Eksempel 2: SLIK utfører DU EN SQL Unpivot-operasjon

La oss nå se i den andre retningen, un-pivoting, som er så enkelt som å gå fra horisontal til vertikal. I dette tilfellet vil du ta alle de forskjellige kolonnene som er valgt, og det vil slå disse kolonneoverskriftene inn i sine egne rader. Pivotering er som å rotere fra vertikal til horisontal. Og un-pivoting er som å rotere fra horisontal til vertikal.

velg salgsår,
totalsalg
fra
(

div>

velg *
fra
(
velg år(soh.OrderDate) SOM Salgsår,
SOH.Delsum SOM TotalSales
fra salg.SalesOrderHeader SOH
BLI med salg.SalesOrderDetail TORV PÅ SOH.SalesOrderId = TORV.Salgsorderid
) SOM SALG PIVOT(SUM(Totalsalg) For Salgår I(,
,
,
)) SOM PVT
) T UNPIVOT(Totalsalg For Salgår i(,
,
,
)) som upvt;

/div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

i følgende eksempel BRUKES det pivoterte datasettet til å un-pivotere verdiene. Nøkkelstykket her er at dette var lett å gjøre for å bli forvandlet fordi vi var i stand til å lage et pivottabell som et mellomliggende trinn og deretter gjøre transformasjonen ved hjelp av unpivot-operasjonen.


reversering av transponere kolonner i segregerte verdier av rader. Unpivot-operatøren vil ikke dele de samlede resultatene.

Eksempel 3: Hvordan få kvartals salg ved HJELP AV SQL pivot operasjon

La oss se noen flere eksempler for å forstå de svingbare konseptene bedre. I dette tilfellet ser vi hvordan du får kvartalsvise salgsdata samlet basert på kvartalsvise salg.

før vi hopper inn i løsningen, anbefales det alltid å jobbe med å lage et datasett for PIVOTOPERASJONEN.

følgende eksempel gir den samlede månedlige salgsspredningen over salgsåret.

velg år(soh.Ordredato) Som Salgsår,
MÅNED(SOH.OrderDate) Som SalesMonth,
SUM(SOH.Delsum) som TotalSales
fra salg.SalesOrderHeader SOH
BLI med salg.SalesOrderDetail TORV PÅ SOH.SalesOrderId = TORV.SalesOrderId
GRUPPE ETTER ÅR (SOH.Ordredato),
MÅNED(SOH.Ordredato)
BESTILL ETTER ÅR (SOH.Ordredato),
MÅNED(SOH.

1
2
3
4
5
6
7
8
9

når du er klar med basisdataene, kan du bruke pivotoperatoren. I eksemplet nedenfor godtar i-setningsdelen et ikke-numerisk tegn som ble generert basert på DATEPART-verdien. DATEPART-verdien er sammenkoblet Med Q, og deretter mates verdiene TIL i pivotoperatoren.

velg salgsår,
isnull(, 0) som q1,
isnull(, 0) som q2,
isnull(, 0) som q3,
isnull(, 0) som q4,
(isnull(, 0) + isnull(, 0) + ISNULL(, 0) + ISNULL (, 0)) SalesYTD
FRA
(
VELG ÅR(SOH.Ordredato) Som Salgsår,
CAST (‘Q’ +CAST (DATEPART (KVARTAL, SOH.OrderDate) SOM VARCHAR (1)) SOM VARCHAR (2)) Kvartaler,
SOH.Delsum SOM TotalSales
fra salg.SalesOrderHeader SOH
BLI med salg.SalesOrderDetail TORV PÅ SOH.SalesOrderId = TORV.Salgsorderid
) Som DATA PIVOT (SUM (Totalsalg) FOR Kvartaler I(,
,
,
)) som pvt
BESTILL Etter Salgsår;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

eksempel 4: slik får du månedlig salg ved hjelp av en sql pivot-operasjon

la oss ta en titt på et annet eksempel for å se salgsdelte data basert på hver måned. I eksemplet nedenfor genereres i-setningsverdiene som en del AV DATEPART-funksjonen. DATEPART-verdiene mates TIL i-setningsdelen AV pivotoperatoren.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

VELG Salgsår,
Isnull(, 0) Som Jan,
Isnull(, 0) Som Februar,
Isnull(, 0) Som Mar,
ISNULL(, 0) Som Apr,
isnull(, 0) Som Mai,
isnull(, 0) som juni,
Isnull(, 0) som juli,
isnull(, 0) som august,
isnull(, 0) som oktober,
isnull(, 0) som november,
isnull(, 0) som november,
isnull(, 0) som november,
isnull (, 0) som dec,
(isnull (, 0) + isnull (, 0) + Isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + Isnull (, 0) +isnull (, 0) + isnull (, 0) + isnull (, 0) +isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + isnull (, 0) + ISNULL(, 0) + ISNULL(, 0) + ISNULL (, 0)) SalesYTD
FRA
(
VELG ÅR (SOH.OrderDate) Som Salgsår,
DATEPART (MÅNED, SOH.Ordredato) Måneder,
SOH.Delsum SOM TotalSales
fra salg.SalesOrderHeader SOH
BLI med salg.SalesOrderDetail TORV PÅ SOH.SalesOrderId = TORV.SalesOrderId
) SOM Data PIVOT(SUM(TotalSales) FOR Måneder I(,
,
,
,
,
,
,
,
,
,
,
)) SOM pvt;

Eksempel 5: hvordan få månedlig salg ved hjelp av dynamisk SQL pivot operasjon

La Oss adressere den månedlige delingen av salgsdata ved hjelp av dynamisk pivotering. Så langt diskuterte vi statiske pivotoperasjoner. For å konvertere en statisk pivotoperasjon til dynamisk, må vi fjerne de hardkodede verdiene fra IN-klausulen. Først får du det distinkte uttrykket fra datasettet, og klargjør deretter en streng ved å sammenkoble alle uttrykkene. I følgende eksempel brukes @columnname til å sette sammen hele uttrykket. Det sammenkoblede uttrykket mates til pivot I klausul. Resten er en enkel konvertering av statisk SQL til en dynamisk SQL og ring @DML ved hjelp av sp_executesql lagret prosedyre.

angir @dml som nvarchar(maks)
erklært @ColumnName SOM Nvarchar (MAKS)
VELG @ColumnName= ISNULL (@ColumnName + ‘,’,»)
+ QUOTENAME (Måneder)
FRA(VELG DISTINKT DATEPART (MÅNED, SOH.Ordredato) Måneder
fra salg.SalesOrderHeader SOH
BLI med salg.SalesOrderDetail TORV PÅ SOH.SalesOrderId = TORV.SalesOrderId
GRUPPE ETTER ÅR (SOH.OrderDate),
DATEPART (MÅNED, SOH.OrderDate)) Som Måneder
— Klargjør PIVOTSPØRRINGEN ved hjelp av dynamisk
SET @dml =
N ‘SELECT SalesYear,’ + @ColumnName + ‘ FRA
(
VELG ÅR (SOH.OrderDate) Som Salgsår,
DATEPART (MÅNED, SOH.Ordredato) Måneder,
SUM(SOH.Delsum) som TotalSales
fra salg.SalesOrderHeader SOH
BLI med salg.SalesOrderDetail TORV PÅ SOH.SalesOrderId = TORV.SalesOrderId
GRUPPE ETTER ÅR (SOH.OrderDate),
DATEPART (MÅNED, SOH.For Måneder I (‘+@ColumnName+’)) Som PVTTable’
– Skriv Ut @DynamicPivotQuery
– Utfør Dynamisk Pivotspørring
EXEC sp_executesql @dml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

det Er Alt for Nå…

innpakning

så langt har vi demonstrert de grunnleggende konseptene og flere eksempler på sql pivot og sql unpivot.

eksemplet er basert PÅ SQL Server adventureworks2014-databasen. Du kan prøve og teste alle prøvene selv. Hvis du har noen spørsmål, kan du gjerne kommentere nedenfor…

  • Forfatter
  • Siste Innlegg
Prashanth Jayaram
jeg er en databaseteknolog som har 11+ års rik, praktisk erfaring med databaseteknologier. Jeg Er Microsoft Sertifisert Profesjonell og støttet med En Grad I Master Of Computer Application.
min spesialitet ligger i å designe & implementere løsninger Med høy tilgjengelighet og DB-Migrasjon på tvers av PLATTFORMER. Teknologiene som for tiden jobber med ER SQL Server, PowerShell, Oracle og MongoDB.
Vis alle innlegg av Prashanth Jayaram

Prashanth Jayaram

Siste innlegg Av Prashanth Jayaram (se alle)
  • en rask oversikt over database revisjon I SQL – januar 28, 2021
  • Hvordan å konfigurere azure datasynkronisering mellom azure Sql-Databaser og Lokal Sql server – 20. januar 2021
  • slik utfører du import – /eksportoperasjoner for azure sql database ved hjelp av powershell-14. januar 2021

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *