Релационните бази данни съхраняват огромни количества данни под формата на таблици. Тези таблици могат да имат произволен брой редове и колони. Но какво ще стане, ако трябва да промените данните на ниво ред на колонни данни? Е, в тази статия за SQL Pivot ще ви покажа как можете да конвертирате редове в колона в SQL Server.
Следните теми ще бъдат обхванати в тази статия:
- Какво е PIVOT в SQL?
- Синтаксис
- Пример
- Работа на клауза PIVOT
- SQL UNPIVOT
Какво е PIVOT в SQL?
PIVOT се използва за завъртане на стойността на таблицата чрез преобразуване на уникалните стойности на една колона в множество колони. Използва се за завъртане на редовете към стойности на колони и изпълнява агрегирания, когато е необходимо, за останалите стойности на колоните.
UNPIVOT, от друга страна, се използва за извършване на противоположни операции. И така, той се използва за преобразуване на колоните на конкретна таблица в стойности на колони.
Продължавайки с тази статия, нека разберем синтаксиса на SQL Pivot.
Синтаксис:
SELECT NonPivoted ColumnName, [First Pivoted ColumnName] AS ColumnName, [Second Pivoted ColumnName] AS ColumnName, [Third Pivoted ColumnName] AS ColumnName, ... [Last Pivoted ColumnName] AS ColumnName FROM (SELECT query which produces the data) AS [alias for the initial query] PIVOT ( [AggregationFunction](ColumName) FOR [ColumnName of the column whose values will become column headers] IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName], [Third Pivoted ColumnName] ... [last pivoted column]) ) AS [alias for the Pivot Table];
Тук можете също да използвате клаузата ORDER BY, за да сортирате стойностите във възходящ или низходящ ред. Сега, когато знаете какво е PIVOT в SQL и основния му синтаксис, нека продължим напред и да видим как да го използваме.
Примери
За по-добро разбиране ще разгледам следната таблица, за да ви обясня всички примери.
Таблица на доставчиците:
ИД на доставчик | DaysofManufacture | Разходи | CustomerID | PurchaseID |
1 | 12 | 1230 | 11 | P1 |
2 | 21 | 1543 | 22 | P2 |
3 | 32 | 2345 | 11 | P3 |
4 | 14 | 8765 | 22 | P1 |
5 | 42 | 3452 | 33 | P3 |
6 | 31 | 5431 | 33 | P1 |
7 | 41 | 2342 | 11 | P2 |
8 | 54 | 3654 | 22 | P2 |
9 | 33 | 1234 | 11 | P3 |
10 | 56 | 6832 | 33 | P2 |
Нека напишем проста заявка, за да извлечем средните разходи, изразходвани от всеки клиент.
SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer FROM Suppliers GROUP BY CustomerID;
Изход:
CustomerID | AverageCostofCustomer |
11 | 1787,75 |
22 | 4654 |
33 | 5238.33 |
Сега да кажем, че искаме да завъртим горната таблица. Тук стойностите на графата CustomerID ще станат заглавки на колоните.
-- Create Pivot table with one row and three columns SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33] FROM (SELECT CustomerID, Cost FROM Suppliers) AS SourceTable PIVOT ( AVG(Cost) FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Изход:
Cost_According_To_Customers | 11 | 22 | 33 |
AverageCostofCustomer | 1787,75 | 4654 | 5238,33 |
Забележка: Когато използвате агрегатни функции с PIVOT, нулевите стойности не се вземат предвид при изчисляване на агрегиране.
Е, това беше основен пример, но нека сега да разберем как работи клаузата PIVOT.
Работа на клаузата PIVOT
Както можете да направите справка по-горе, за да създадете ОСВОЯТА ТАБЛИЦА, трябва да следвате стъпките по-долу:
- Изберете колони за завъртане
- След това изберете таблица източник.
- Приложете оператора PIVOT и след това използвайте агрегатните функции.
- Споменете стойностите на централната точка.
Изберете колони за завъртане
Първоначално трябва да посочим полетата, които да бъдат включени в нашите резултати. В нашия пример разгледах колоната AverageCostofCustomer в обобщената таблица. След това създадохме три други колони със заглавки на колони 11, 22 и 33. Пример-
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]
Изберете таблица с източник
След това трябва да посочите оператора SELECT, който ще върне изходните данни за централната таблица. В нашия пример ние връщаме CustomerID и Cost от таблицата Доставчици.
(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable
Приложете оператора PIVOT и след това използвайте агрегатните функции
След това трябва да посочите агрегатната функция, която да се използва при създаването на обобщената таблица. В нашия пример използвах функцията AVG за изчисляване на средната цена.
PIVOT ( AVG(Cost)).
Споменете стойностите на централната точка
Накрая трябва да споменете стойностите, които трябва да бъдат включени в получената обобщена таблица. Тези стойности ще се използват като заглавия на колоните в обобщената таблица.
FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Така работят операторите PIVOT. Продължавайки в тази статия за SQL PIVOT, нека разберем колко е различен от SQL UNPIVOT.
SQL UNPIVOT
Операторът SQL UNPIVOT се използва за извършване на операция, обратна на тази на PIVOT. Използва се за завъртане на данните в колоната в данни на ниво ред. Синтаксисът на UNPIVOT е подобен на този на PIVOT. Единствената разлика е, че трябва да използвате ключовата дума SQL „UNPIVOT“ .
Пример:
Нека създадем таблица с колоните SupplierID, AAA, BBB и CCC. Също така въведете няколко стойности.
CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int); GO INSERT INTO sampletable VALUES (1,3,5,6); INSERT INTO sampletable VALUES (2,9,2,8); INSERT INTO sampletable VALUES (3,8,1,7); GO
Изход:
ИД на доставчик | AAA | BBB | CCC |
1 | 3 | 5 | 6 |
2 | 9 | 2 | 8 |
3 | 8 | 1 | 7 |
Сега, да кажем, искаме да отменим завъртането на таблицата. За да направите това, можете да се обърнете към следния код:
SELECT SupplierID, Customers, Products FROM (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC) )AS example; GO
ИД на доставчик | Клиенти | Продукти |
1 | AAA | 3 |
1 | BBB | 5 |
1 | CCC | 6 |
2 | AAA | 9 |
2 | BBB | 2 |
2 | CCC | 8 |
3 | AAA | 8 |
3 | BBB | 1 |
3 | CCC | 7 |
Ето как можете да използвате SQL PIVOT и UNPIVOT. С това стигаме до края на тази статия. Надявам се, че сте разбрали как да използвате SQL. Ако искате да научите повече за MySQL и да се запознаете с тази релационна база данни с отворен код, разгледайте нашето Обучение за сертифициране на MySQL DBA която идва с обучение на живо от инструктор и реален опит с проекти. Това обучение ще ви помогне да разберете MySQL в дълбочина и ще ви помогне да постигнете майсторство по темата.
Имате въпрос към нас? Моля, споменете го в секцията за коментари на тази статия за SQL Pivot и аз ще се свържа с вас.