SQL Server разворачивается с несколькими столбцами - PullRequest
0 голосов
/ 29 октября 2018

Пытаясь заставить Unpivot примениться к нескольким столбцам, и я пытаюсь заставить его работать правильно. Может быть, это не правильное решение, поэтому определенно открыты для предложений. Вот пример моего набора данных

Пример набора данных в Excel

Пример необходимого набора данных в 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

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

У вас просто пара неправильных имен. Вы можете отключить с помощью 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
0 голосов
/ 29 октября 2018

Вместо UNPIVOT, другой вариант использует CROSS APPLY. Он предлагает немного больше гибкости

* ** 1003 тысяча два * Пример
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'
...