Как использовать UNPIVOT в SQL Server - PullRequest
1 голос
/ 19 июня 2019

У меня есть таблица StoreDetails со следующими данными.

 Store  1       2       3
-------------------------------
101     138     282     220
102     96      212     123
105     37      78      60
109     59      97      87

Мой требуемый вывод:

Store       Week        xCount
---------------------------------
101         1           138
102         1           96
105         1           37
109         1           59
101         2           282
102         2           212
105         2           78
109         2           97
101         3           220
102         3           123
105         3           60
109         3           87

Как я могу получить этот набор результатов, используя UNPIVOT?

Ответы [ 2 ]

5 голосов
/ 19 июня 2019

Я предпочитаю использовать cross apply:

select sd.store, v.week, v.xcount
from storedetails sd cross apply
     (values (1, sd.[1]), (2, sd.[2]), (3, sd.[3]), (4, sd.[4])
     ) v(week, xcount);

Почему я предпочитаю apply над unpivot? unpivot - это очень специфический синтаксис, который выполняет только одну вещь (и специфичен для SQL Server и Oracle).

С другой стороны, apply - это введение в боковые соединения. Они очень могущественны, и они могут сделать только одно.

3 голосов
/ 19 июня 2019

вы можете попробовать ниже-

select store,week, xcount
from StoreDetails
unpivot
(
  xcount for week in (1,2,3)
)up
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...