在SQL中成对部分取消UNPIVOT的更好方法

问题描述

|| 我有下表
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 (将#修改为@)