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 ответ

  1. Чтобы сделать это без цикла, необходимо добавить искусственный номер строки, например, через столбец идентификаторов. Если вы не хотите изменять схему, сначала скопируйте всю таблицу во временную таблицу.
    (Я не проверял синтаксические ошибки, но вы получите идею)

    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