SQL服务器在多列上进行透视

use*_*310 8 sql sql-server pivot

我试图转向多列.我正在使用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
Run Code Online (Sandbox Code Playgroud)

以下是我得到的结果

id  1     2     11    12
10  NULL  C     NULL  D
10  A     NULL  B     NULL
Run Code Online (Sandbox Code Playgroud)

但我想要实现的结果是,

id  1   2   11   12
10  A   C   B    D
Run Code Online (Sandbox Code Playgroud)

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

Tar*_*ryn 11

我会首先将列拆分成对,然后转动它们.基本上,逆透视过程中会转化列对(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;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

  • @ Trojan.ZBOT除了使用pivot之外,还有其他方法可以获得最终结果.如果你有一个特定的问题,那么我会发布一个以获得最佳答案...这比在评论中来回更容易.:) (2认同)

小智 5

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
Run Code Online (Sandbox Code Playgroud)

  • 您能否详细说明一下您的解决方案如何实现 OP 的要求?只是复制/粘贴代码而不了解它的作用并不有趣。 (8认同)