Я предпочитаю использовать 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
- это введение в боковые соединения. Они очень могущественны, и они могут сделать только одно.