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

Моля, обяснете частите на PIVOT

Обяснение на обобщената заявка

FROM 
    (SELECT OtherID, Val, amount
    FROM @randomTable) p

Това са колоните, които се превръщат в "базови данни" за обобщената точка. Не включвайте колони, които не правят нищо. Точно както не поставяте колони, които не са GROUP BY в клаузата SELECT, вие не изброявате неизползваните колони в източник на PIVOT.

PIVOT
(
    max(amount)
    FOR Val IN (Val1, Val2, Val3, Val4, Val5)
) AS PivotTable;

Тази част казва, че създавате 5 нови колони с име "Val1" до "Val5". Тези имена на колони представляват стойности в колоната Вал. Така че се очаква вашата таблица да съдържа нещо подобно

otherID   Val     amount
1         Val1    1
2         Val2    2
1         Val3    3
1         Val1    5
(etc)     (this column contains one of Val1 - Val5, or null)

Така че сега имате 5 нови колони, които не са съществували преди. Какво влиза в колоната?

  • Всяка колона, която се появява в OUTPUT, която не е PIVOTed колона, е колона „GROUP BY“.
  • Агрегираната функция е това, което събира всички данни в клетката, която е КРЪСТЪТ между колоните GROUP BY и колоната PIVOTED.

И така, за илюстрация, използвайки примерните данни по-горе, имаме otherID=1 и val=Val1. В изходната таблица има само една клетка, представляваща тази комбинация от Max(amount) за всяка комбинация (otherID/val)

otherID   Val1   Val2   Val3   Val4   Val5
1         <x>    ...    ...    ...    ...
(etc)

За клетката, отбелязана с <x> , е разрешена само една стойност, така че <x> не може да съдържа множество amount стойности. Това е причината, поради която трябва да го обобщим, в този случай използвайки MAX(amount) . Така че всъщност резултатът изглежда така

(unpivoted columns)   (pivoted, creates "new" columns)
otherID             |  Val1          Val2           Val3   Val4   Val5
1                   |  MAX(amount)   Max(amount)    << cell value = aggregate function
(etc)

Операторът SELECT е това, което след това извежда тези колони

SELECT OtherID, Val1, Val2, Val3, Val4, Val5



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате GOTO в SQL Server

  2. Проблем с вмъкване на паралелността - многонишкова среда

  3. Как да получа списък с колони в таблица или изглед?

  4. Архивиране/възстановяване на SQL Server срещу отделяне/прикачване

  5. Как да намерите кръгова зависима таблица в sql сървър