Bevezető
az utolsó cikk “Konvertáló Vesszővel Elválasztott értékeket tartalmazó Sorok, illetve Fordítva, az SQL Server”, beszéltünk arról, hogyan lehet átalakítani a vesszővel elválasztott (vagy elválasztva egy másik karakter) értékek, egyetlen oszlop, a sor, valamint fordítva. Ebben a cikkben bemutatom, hogyan lehet a sorok értékeit oszlopértékekké (PIVOT), az oszlopok értékeit sorértékekké (UNPIVOT) konvertálni az SQL Serverben.,
Konvertáló Sorok Oszlopok – PIVOT
az SQL Server egy PIVOT relációs üzemeltető nem kapcsolja az egyedi értékek egy megadott oszlop több sor a több oszlop értékeit a kimeneti (cross-tab), hatékonyan forgó asztal. Azt is lehetővé teszi végző aggregációk, ahol szükséges, oszlop értékeket, amelyek várhatóan a végső kimenet. A PIVOT relációs operátor alapvető szintaxisa így néz ki:
az alábbi szkript segítségével hozzunk létre egy táblázatot, majd töltsünk be néhány adatot., Amint az az alábbi képen látható, néhány országban néhány évig értékesítési információkkal rendelkezik. Továbbá, ha észreveszi, minden országra és minden évre külön sor van.
most a PIVOT operátor használatával a sorértékeket oszlopértékekké alakítjuk át az alábbi szkripttel, valamint az eredményeket az alábbi képen látható módon.
bár az ÖSSZEGÖSSZESÍTÉSI függvényt használtuk, ebben az esetben nincs összegzés, mivel minden egyes egyedi kombinációhoz csak egy sor van országra és évre., Kérjük, vegye figyelembe a zárójelek használatát a pivot oszlop értékeihez; ezekre szükség van.
dinamizmust hozva a PIVOTBA
Ha a fenti szkriptben észreveszi, értékeket (2005, 2006, 2007 és 2008) adtunk meg a pivot oszlopokhoz, mivel ezek az értékek az eredeti adatkészletekben elérhetők. De mi van, ha néhány további érték várható a jövőben, például 2009-ben és 2010-ben stb. a pivot oszlophoz?,
ebben az esetben továbbra is használhatja a pivot oszlop értékeket, amelyek várhatóan jönnek (vagy amelyek még mindig nem állnak rendelkezésre az eredeti adatkészletben) a jövőben, bár értékeihez NULL értéket fog látni. Az alábbi forgatókönyv ezt a forgatókönyvet mutatja, az alábbi képen pedig a 2009-es és a 2010-es évekre vonatkozó adatok láthatók, mivel ezekre az évekre Nincs adat.
a fent tárgyalt megközelítés jól működik, ha már ismeri a pivot oszlop összes lehetséges értékét, de mi van, ha nem?,
ebben Az esetben, akkor írj egy dinamikus lekérdezés első megragad minden, az egyedi értékek a pivot oszlop futásidőben majd írni dinamikus lekérdezést végrehajtani a pivot lekérdezés, mint alább látható:
Konvertáló Oszlopok, Sorok – UNPIVOT
UNPIVOT egy másik relációs operátor az SQL Szerver végzi majdnem a fordított művelet a PIVOT, forgatásával oszlop értékeit a sorok értékek. Hadd mutassam be ezt egy példával; lehetővé teszi, hogy hozzon létre egy táblázatot az előző lekérdezés elforgatott adataival az alábbi szkript segítségével., Az alábbi kép az újonnan létrehozott táblázat adatait mutatja elforgatott adatokkal.
az oszlopértékek sorértékekké történő elforgatásához most a UNPIVOT operátort használjuk az alábbiak szerint. Az alábbi képen elforgatott adatok láthatók:
ha visszautal, azt mondtam, hogy a UNPIVOT szinte a PIVOT operátor fordítottja; ez azt jelenti, hogy lehet, hogy nem pontosan ugyanaz. Ennek oka, hogy a Pivot összesítést hajt végre, miközben sorértékeket oszlopértékekké forgat, és egyesítheti a lehetséges több sorértéket a kimenet egyetlen oszlopértékébe., Vegyük például, hogy egy adott országban és évben két érték van, mondjuk 5000 és 6000. Most, amikor elforgatja, a kimenet 11000 lesz oszlopértékként, ha összege van aggregációs funkcióként. Később, ha vissza szeretné csomagolni, akkor 11000-et kap, nem pedig a bi-furcated értékeket (5000 és 6000 eredeti). Ezt követően elmondhatjuk, hogy ha az elforgatott értékek aggregált értékek, akkor az eredeti adatokat nem lehet visszaadni.,
következtetés
ebben a cikkben bemutattam, hogyan lehet A sorértékeket oszlopértékekké (PIVOT), az oszlopértékeket sorértékekké (UNPIVOT) konvertálni az SQL Serverben. Arról is beszéltem, hogy dinamikus lekérdezést írok egy dinamikus pivot lekérdezés írására, amelyben a lehetséges pivot oszlopértékeket futásidőben határozzák meg.