Отключить определенные столбцы в 2 выходных столбца - PullRequest
0 голосов
/ 04 марта 2019

У меня есть следующая таблица исходной таблицы A:

  [start1]     [end1]       [start2]     [end2]       [start3]      [end3]
  2019-01-01   2019-01-26   2019-01-27   2019-02-23   2019-02-24    2019-03-30  

Как мне UNPIVOT получить результат (в идеале с индексом):

[index]  [start]     [end]       
1        2019-01-01  2019-01-26
2        2019-01-27  2019-02-23
3        2019-02-24  2019-03-30

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Пожалуйста, попробуйте это:

SELECT p.[index],p.[start],p.[end]
FROM (
    SELECT TRY_CONVERT(INT,REPLACE(REPLACE(up.Param,'start',''),'end','')) AS [index]
        ,CASE WHEN up.Param LIKE 'start%' THEN 'start' ELSE 'end' END AS [Type]
        ,up.[Value]
    FROM [YourTableName] t
    UNPIVOT(Value FOR Param IN ([start1],[end1],[start2],[end2],[start3],[end3])) up
) a
PIVOT(MAX(a.[Value]) FOR [Type] IN ([start],[end])) p
;
0 голосов
/ 04 марта 2019

Вы хотите apply:

select row_number() over (order by tt.start) as [index], tt.*
from table t cross apply 
     ( values ([start1], [end1]), ([start2], [end2]), . . .
     ) tt (start, end);
...