SQL - Pivot 2列

时间:2014-04-11 20:20:26

标签: sql sql-server pivot

我有以下sql

CREATE TABLE #t ( id varchar(10)
                 ,Rscd varchar(10)
                 ,Accd varchar(10))

INSERT INTO #t Values ('EHC','A','B') 
INSERT INTO #t Values ('DEN','C','D')

select EHC,DEN
from
(
  select id as id2, value
  from #t
cross apply
  (
    select id,Rscd union  select id,Accd
    ) c (id2,value)
) d
pivot
(
  max(value)
  for id2 in ([EHC],[DEN])
) piv;

这产生输出为

EHC DEN
B    D

但我需要Out out as

EHC DEN EHC2 DEN2
B    D    A   C

这可能吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您需要实现类似row_number()的窗口函数才能获得结果。这将基于id创建序列号。您似乎有一个特定的订单,您希望数据输入,如果是这样,那么当您通过CROSS APPLY进行解锁时,我会创建一个列,用于订购数据:

select EHC1,DEN1, EHC2, DEN2
from
(
  select value,
    id2 = id
          + cast(row_number() over(partition by id
                                    order by so desc) as varchar(10))
  from #t
  cross apply
  (
    select id, Rscd, 1 union  
    select id, Accd, 2
  ) c (id2,value, so)
) d
pivot
(
  max(value)
  for id2 in ([EHC1],[DEN1], [EHC2],[DEN2])
) piv;

请参阅SQL Fiddle with Demo