10

我正在尝试以多列为中心。我正在使用 SQL Server 2008。这是我迄今为止尝试过的

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

INSERT INTO #t Values (10,'A','B',1)

INSERT INTO #t Values (10,'C','D',2)

Select id,[1],[2],[11],[12] FROM
(SELECT id, Rscd,Accd, position , position +10 as Aposition 
From #t)
As query
PIVOT (MAX(Rscd )
      FOR Position IN ([1],[2])) AS Pivot1
      PIVOT (MAX(Accd )
      FOR Aposition IN ([11],[12])) AS Pivot2

下面是我得到的结果

id  1     2     11    12
10  NULL  C     NULL  D
10  A     NULL  B     NULL

但我想要达到的结果是,

id  1   2   11   12
10  A   C   B    D

有什么帮助吗?我的代码有什么问题。

4

3 回答 3

14

我会先将列旋转成对,然后再旋转它们。基本上 unpivot 过程会将列对(rscd,positionaccd, aposition)转换为行,然后您可以应用枢轴。代码将是:

select id, [1], [2], [11], [12]
from
(
  select id, col, value
  from #t
  cross apply
  (
    select rscd, position union all
    select Accd, position + 10
  ) c (value, col)
) d
pivot
(
  max(value)
  for col in ([1], [2], [11], [12])
) piv;

请参阅带有演示的 SQL Fiddle

于 2013-09-06T16:14:52.023 回答
4
Select id,sum([1]),sum([2]),sum([11]),sum([12]) FROM
(SELECT id, Rscd,Accd, position , position +10 as Aposition 
From #t)
As query
PIVOT (MAX(Rscd )
      FOR Position IN ([1],[2])) AS Pivot1
      PIVOT (MAX(Accd )
      FOR Aposition IN ([11],[12])) AS Pivot2

group by id
于 2014-01-28T13:10:54.340 回答
-3

不要使用 ID 列。使用派生表检索除 ID 之外的所有列,然后使用 PIVOT 表。

于 2013-11-09T10:34:49.180 回答