Sybase ASE将无限数量的行转置为列

时间:2016-05-27 15:35:36

标签: pivot-table sybase ase

我尝试过制作数据透视表,但仅限于固定行数。

我有以下记录:

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

1 个答案:

答案 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