У меня есть следующая таблица
VendorID EMP1A EMP2A EMP1B EMP2B
----------- ----------- ----------- ----------- -----------
1 4 3 5 4
2 4 1 5 5
3 4 3 5 4
4 4 2 5 5
5 5 1 5 5
Я хочу UNPIVOT попарно, чтобы получить столбцы «A» в одной строке и столбцы «B» в другой
vendorid employee orders employee orders
----------- --------- ----------- --------- -----------
1 EMP1A 4 EMP2A 3
1 EMP1B 5 EMP2B 4
2 EMP1A 4 EMP2A 1
2 EMP1B 5 EMP2B 5
3 EMP1A 4 EMP2A 3
3 EMP1B 5 EMP2B 4
4 EMP1A 4 EMP2A 2
4 EMP1B 5 EMP2B 5
5 EMP1A 5 EMP2A 1
5 EMP1B 5 EMP2B 5
Это работает, но кажется, что я слишком много работаю
DECLARE @pvt AS TABLE(
VendorID INT,
EMP1A INT,
EMP2A INT,
EMP1B INT,
EMP2B INT);
INSERT INTO @pvt VALUES (1,4,3,5,4),
(2,4,1,5,5),
(3,4,3,5,4),
(4,4,2,5,5),
(5,5,1,5,5)
;WITH piv1
AS (SELECT vendorid,
employee,
orders
FROM (SELECT vendorid,
EMP1A,
EMP1B
FROM @pvt) p
UNPIVOT (orders FOR employee IN (EMP1A, EMP1B) )
AS
unpvt),
piv2
AS (SELECT vendorid,
employee,
orders
FROM (SELECT vendorid,
EMP2A,
EMP2B
FROM @pvt) p UNPIVOT (orders FOR employee IN (EMP2A, EMP2B) )
AS
unpvt)
SELECT piv1.vendorid,
piv1.employee,
piv1.orders,
piv2.employee,
piv2.orders
FROM piv1
INNER JOIN piv2
ON piv1.vendorid = piv2.vendorid
AND RIGHT(piv1.employee, 1) = RIGHT(piv2.employee, 1)
WHERE
piv1.orders > piv2.orders
Примечание: это упрощенный пример, и на самом деле есть 25 пар, которые необходимо преобразовать в строки, и я также хочу легко фильтровать
например. добавление WHERE piv1.orders = piv2.orders
производит
vendorid employee orders employee orders
----------- --------- ----------- --------- -----------
2 EMP1B 5 EMP2B 5
4 EMP1B 5 EMP2B 5
5 EMP1B 5 EMP2B 5