FROM – a PIVOT és az UNPIVOT használata
- 2019.10.14.
- 5 perc olvasási idő
-
- V
- c
- M
- i
- M
-
+7
A következőre vonatkozik: SQL Server (az összes támogatott verzió) Azure SQL Database Azure SQL felügyelt példány Azure Synapse Analytics Párhuzamos adattárház
Használhatja a PIVOT
és UNPIVOT
relációs operátorokat a egy táblázat által értékelt kifejezést módosítson egy másik táblára. A PIVOT
táblázatértékű kifejezést forgat azáltal, hogy a kifejezés egyik oszlopának egyedi értékeit a kimenet több oszlopává alakítja. És a PIVOT
összesítéseket futtat, ahol szükségesek a hátralévő oszlopértékek, amelyekre a végső kimenetben szükség van. a PIVOT-hoz úgy, hogy egy táblázat által értékelt kifejezés oszlopait oszlopértékekké forgatja.
A PIVOT
szintaxisa egyszerűbb és olvashatóbb, mint az egyébként esetlegesen használt szintaxis. a SELECT...CASE
utasítások összetett sorozatában van megadva. A PIVOT
szintaxisának teljes leírását lásd: FROM (Transact-SQL).
Szintaxis
A következő szintaxis összefoglalja a PIVOT
operátor használatát.
Megjegyzések
Az UNPIVOT
záradék oszlopazonosítói követik a katalógus összeállítását. Az SQL Database esetében a leválogatás mindig SQL_Latin1_General_CP1_CI_AS
. SQL Server esetén részben adatbázisok esetén az összevonás mindig Latin1_General_100_CI_AS_KS_WS_SC
. Ha az oszlop kombinált ed más oszlopokkal, akkor az ütközések elkerülése érdekében egy leválási záradék (COLLATE DATABASE_DEFAULT
) szükséges.
Alapvető PIVOT példa
A következő kódpélda két oszlopos táblázatot készít, amelynek négy sora van.
Itt található az eredménykészlet.
Három termékkel nincs megadva DaysToManufacture
.
A következő kód ugyanazt az eredményt mutatja, elfordítva, hogy a DaysToManufacture
értékek oszlopfejlécekké válnak. Három napra oszlopot adunk meg, annak ellenére, hogy az eredmények
NULL
.
Íme az eredménykészlet .
Komplex PIVOT példa
Gyakori forgatókönyv, ahol a PIVOT
hasznos lehet amikor táblázatok közötti áttekintést szeretne készíteni az adatok összefoglalása érdekében. Tegyük fel például, hogy az PurchaseOrderHeader
táblázatot szeretné lekérdezni az AdventureWorks2014
minta adatbázisban az egyes alkalmazottak által leadott megrendelések számának meghatározásához. A következő lekérdezés biztosítja ezt a jelentést, szállító által rendezve.
Itt van egy részleges eredménykészlet.
Az ezen alszelektum által visszaadott eredmények utasítás el van forgatva a EmployeeID
oszlopban.
A oszlop mezővé válik a végső eredményhalmazban. Mint ilyen, van egy oszlop az egyes kimutatásban megadott EmployeeID
számokhoz: ebben az esetben az alkalmazottak 250
, 251
, 256
, 257
és 260
. A PurchaseOrderID
oszlop értékoszlopként szolgál, amelyhez a végső kimenetben visszaadott oszlopokat csoportosító oszlopoknak nevezzük. Ebben az esetben a csoportosító oszlopokat a COUNT
függvény. Figyelje meg, hogy megjelenik egy figyelmeztető üzenet, amely jelzi, hogy a PurchaseOrderID
oszlopban megjelenő semmilyen nullértéket nem vették figyelembe a COUNT
minden alkalmazottnál.
Fontos
Ha összesített függvényeket használnak a PIVOT
, az értékoszlopban semmilyen nullérték jelenlétét nem vesszük figyelembe az összesítés kiszámításakor.
UNPIVOT példa
UNPIVOT
az PIVOT
szinte fordított műveletét hajtja végre, az oszlopok sorokba forgatásával. Tegyük fel, hogy az előző példában előállított tábla pvt
néven van tárolva az adatbázisban, és el akarja forgatni az oszlopazonosítókat Emp1
, Emp2
, Emp3
, Emp4
és Emp5
sorértékekbe, amelyek egy adott szállítónak felelnek meg. Mint ilyen, meg kell jelölnie két további oszlopot.Az az oszlop, amely tartalmazza az Ön által forgatott oszlopértékeket (Emp1
, Emp2
, …), a következő neve lesz: div div = “e1a1fdc54a”>
, és azt az oszlopot, amely megtartja az elforgatott oszlopok alatt jelenleg létező értékeket, Orders
-nek hívjuk. Ezek az oszlopok megegyeznek a pivot_column és az value_column értékekkel , illetve a Transact-SQL definícióban. Itt van a lekérdezés.
Itt van egy részleges eredménykészlet.
Vegye figyelembe, hogy A UNPIVOT
nem a PIVOT
pontos fordítottja. A PIVOT
összesítést hajt végre, és a lehetséges több sort egyesíti a kimenet egyetlen sorába. A UNPIVOT
nem reprodukálja az eredeti táblázatértékű kifejezés eredményt, mert a sorok összevonásra kerültek. A UNPIVOT
bemenet null értékei is eltűnnek Amikor az értékek eltűnnek, az azt mutatja, hogy a bemenetben lehetnek eredeti null értékek a PIVOT
művelet előtt.
A Sales.vSalesPersonSalesByFiscalYears
nézet az AdventureWorks2012 mintaadatbázisban a PIVOT
felhasználással adja vissza az értékesítők összes értékesítését minden pénzügyi évben. A nézet parancsfájlba írása az SQL Server Management Studio alkalmazásban , keresse meg az Objektumkezelőben a nézetet az AdventureWorks2012 adatbázis Nézetek mappájában. Kattintson a jobb gombbal a nézet nevére, majd válassza a Szkript nézet parancsot.
Lásd még
FROM (Transact -SQL)
ESET (Transact-SQL)