0

我试过做数据透视表,但只针对固定数量的行。

我有以下记录:

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 返回的行数不是固定的。我想尽可能避免使用光标。

4

1 回答 1

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
于 2016-06-01T07:22:31.287 回答