Database
 sql >> база данни >  >> RDS >> Database

SQL Pivot – Знайте как да конвертирате редове в колони

Релационните бази данни съхраняват огромни количества данни под формата на таблици. Тези таблици могат да имат произволен брой редове и колони. Но какво ще стане, ако трябва да промените данните на ниво ред на колонни данни? Е, в тази статия за 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 и аз ще се свържа с вас.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Прикачване на ContentDocument към персонализиран обект на Salesforce

  2. Трансформирайте ODBC данни в CloverDX

  3. Търсене на модел на схема към асоциация на клас данни

  4. Използване на RStudio с несистемна версия на мениджъра на драйвери unixODBC

  5. SAP Lumira и мостът JDBC-ODBC