我正试图在我的查询(SQL Server2008 R2)中透视数据,我只需要透视2列,但透视之后可能有多达20列。以下是我的测试数据,最多包含5个诊断代码:
pid DiagnosisCode
111 145.9
111 17.43
111 17.84
111 196.2
111 202.81
112 204.21
112 249.71
112 263.8
112 145.9
113 269.8
113 276.7我尝试获得的输出如下所示:
pid | code1 | code2 | code3 | code4 | code5 | code6 | code... | code20
----------------------------------------------------------------------------
111 145.9 17.43 17.84 196.2 202.81 NULL NULL NULL
112 204.21 249.71 263.8 145.9 NULL NULL NULL NULL
113 269.8 276.7 NULL NULL NULL NULL NULL NULL我的代码是:
select pid, DiagnosisCode
from
(select pid, DiagnosisCode, row_number() over(partition by pid order by pid)
as seq
from #temp
) as src
pivot
(min(DiagnosisCode)
for seq
in (DiagnosisCode)) pvt我知道MIN()聚合函数是必需的,但我不需要在输出中使用它。我添加了ROW_NUMBER()行,以便在阅读一篇文章后有一个序列字段,但我不确定为什么需要它。我已经阅读了这里和其他网站上的所有其他Pivot帖子。我知道这已经在这个网站上重复了很多次,但如果你能帮助我理解我的查询中还需要什么才能让它工作,我将不胜感激。
发布于 2017-08-12 03:50:55
您需要修复列;SQL数据透视表与Access不同,这是一个示例
declare @t as table (pid int , DiagnosisCode decimal(10,1))
insert @t select 111 , 145.9
insert @t select 111 , 17.43
insert @t select 111 , 17.84
insert @t select 111 , 196.2
insert @t select 111 , 202.81
insert @t select 112 , 204.21
insert @t select 112 , 249.71
insert @t select 112 , 263.8
insert @t select 112 , 145.9
insert @t select 113 , 269.8
insert @t select 113 , 276.7
select * from @t
select pid
,code1
,code2
,code3
,code4
,code5
,code6
,code7
,code8
,code9
,code10
,code11
,code12
,code13
,code14
,code15
,code16
,code17
,code18
,code19
,code20
from
(
select pid, DiagnosisCode, 'code' + cast(row_number() over(partition by pid order by pid) as varchar(2))
as seq
from @t
) as src
pivot
(min(DiagnosisCode)
for seq
in (
code1
,code2
,code3
,code4
,code5
,code6
,code7
,code8
,code9
,code10
,code11
,code12
,code13
,code14
,code15
,code16
,code17
,code18
,code19
,code20
)) pvt
pid code1 code2 code3 code4 code5 code6 code7 .... code20
---- ------ ------ ------- ------- ------ ------ ------ -------
111 145.9 17.4 17.8 196.2 202.8 NULL NULL NULL
112 204.2 249.7 263.8 145.9 NULL NULL NULL NULL
113 269.8 276.7 NULL NULL NULL NULL NULL NULLhttps://stackoverflow.com/questions/45641762
复制相似问题