我尝试过制作数据透视表,但仅限于固定行数。
我有以下记录:
ID CODE
=== ====
1 AAA
1 BBB
1 CCC
2 DDD
3 EEE
3 FFF
4 GGG
4 HHH
4 III
4 JJJ
我的预期结果是:
ID CODE1 CODE2 CODE3 CODE4
=== ===== ===== ===== =====
1 AAA BBB CCC
2 DDD
3 EEE FFF
4 GGG HHH III JJJ
请注意,每个id返回的行数不固定。我想尽可能避免光标。
答案 0 :(得分:0)
要在没有循环的情况下执行此操作,您需要添加人工行号,例如通过标识列。如果您不想更改架构,请先将整个表复制到临时表中。 (我没有检查语法错误,但你会得到这个想法)
alter table yourtab add seq int identity not null
select id, min_seq=min(seq) into #t from yourtab group by id
select id=max(id), code1=max(code1), code2=max(code2),
code3=max(code3), (etc) from ( select id = yourtab.id,
code1=case (yourtab.id-#t.min_seq) when 0 then code else null end,
code2=case (yourtab.id-#t.min_seq) when 1 then code else null end,
code3=case (yourtab.id-#t.min_seq) when 2 then code else null end,
[...etc...]
from yourtab, #t where yourtab.id = #t.id order by
yourtab.id ) as newtab