问题描述
||
我有下表
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
我想成对地取消预订,所以我在一行上获得\“ 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,1,5),(3,(4,2,(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,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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)