2012-09-22 3 views
2

Я ищу запрос для частичного поворота таблицы без использования оператора PIVOT (старый сервер ms-sql). стол:
Частичный стержень без оператора поворота

id-------item---------rank1---------rank2 
231------it1--------- 1 ----------- 1 
231------it2-------- 1 ----------- 2 
231------it3--------- 1 ----------- 3 
154------it4--------- 3 ----------- 4 
154------it2--------- 1 ----------- 2 
155------it2--------- 1 ----------- 2 
156------it3 -------- 2 ----------- 2 
156------it1 -------- 1 ----------- 1 

ожидаемый результат:

id---------item1----item2----item3---item*... 
231 -------it1------it2---------it3 
154--------it2------it4 
155--------it2 
156--------it1------it3 

заказ по ранге-1 и rank2

Я искал в Google, но решение, которое я нашел, было слишком сложным для применения.

+0

какая версия SQL Server? – Taryn

ответ

1

В SQL Server вы можете использовать row_number для присвоения номера строки для каждой группы id. Затем вы можете использовать max(case(... трюк поворот:

select id 
,  max(case when rn = 1 then item end) as item1 
,  max(case when rn = 2 then item end) as item2 
,  max(case when rn = 3 then item end) as item3 
from (
     select row_number() over (partition by id 
        order by rank1, rank2) as rn 
     ,  * 
     from YourTable 
     ) as SubQueryAlias 
group by 
     id 

Там нет общего решения для N элементов без использования динамического SQL.

+0

Я постараюсь, спасибо за быстрый ответ. Невозможно объединить макс и случай.
в этом конкретном случае (конечно же, я понял). Мне нужно добавить строку с
max (случай, когда rn = 4, затем конец предмета) как item4 – user1690564

Смежные вопросы