加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:54:53 所属栏目:MsSql教程 来源:网络整理
导读:我试图转向多列.我正在使用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] FR
我试图转向多列.我正在使用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

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

解决方法

我会首先将列拆分成对,然后转动它们.基本上,unpivot进程会将列对(rscd,position和accd,aposition)转换为行,然后您可以应用pivot.代码将是:
select id,[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],[12])
) piv;

见SQL Fiddle with Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读