SQL 服务器反透视多列

SQL Server unpivot with multiple columns

试图让一个 Unpivot 应用到几个列上,但我正在努力让它正常工作。也许它不是正确的解决方案,所以绝对愿意接受建议。这是我的数据集的示例

Sample Data Set In Excel

Sample Wanted Data Set In Excel

抱歉提供链接,目前还不能在这些帖子中粘贴图片。

这是我接近的代码,看起来我很接近……但也许不是。

SELECT 
    RunDate,
    ShipMode,
    Amt
FROM
    (SELECT
         CAST(sh.RunDt as DATE) as RunDt,
         sh.method1, sh.method2, sh.method3,
         sh.method4, sh.method5
     FROM 
         [dbo].sampletable sh
     WHERE 
         RunDt = '2016-10-17') AS P
UNPIVOT (
    RunDate FOR ShipMode IN(method1, method2, method3,method4, method5)
) AS Unpvt

除了 UNPIVOT,另一种选择是使用 CROSS APPLY。它提供了更多的灵活性

例子

Select A.RunDt
      ,B.*
 From  YourTable A
 Cross Apply ( values ('Method1',Method1)
                     ,('Method2',Method2)
                     ,('Method3',Method3)
                     ,('Method4',Method4)
                     ,('Method5',Method5)
             ) B(Overall,Amt)
 Where RunDt = '2016-10-17'

你只是有几个名字错了。您可以使用 SQL:

取消透视
SELECT 

RunDt ,ShipMode ,Amt FROM (

 SELECT 
 CAST(sh.RunDt as DATE) as RunDt
,sh.method1 
,sh.method2 
,sh.method3  
,sh.method4 
,sh.method5
FROM [dbo].sampletable  sh
WHERE RunDt = '2018-10-17'

) AS P UNPIVOT ( Amt FOR ShipMode IN(method1, method2, method3,method4, method5) ) as Unpvt