Поворот в Sybase SQL Query?

Я ищу способ повернуть следующие результаты...

ID | Group_Level | Group_Values
1  | Division    | Value 1 
2  | Department  | Value 2
3  | Class       | Value 3

В следующую структуру....

ID | Division | Department | Class
1  | Value 1  | Value 2    | Value 3    
2  | Value 1  | Value 2    | Value 3

Количество колонок фиксировано (это всегда будет отдел/отдел/класс). Запрос предназначен для Sybase... пока не удалось понять, как добиться такого поворота. Любой совет?


person Borophyll    schedule 13.11.2011    source источник
comment
Что связывает любой набор из 3 строк, которые вы хотите превратить в столбцы?   -  person gbn    schedule 13.11.2011


Ответы (2)


Вам нужен ключ, чтобы определить набор из 3 строк. Затем вы просто ПРИСОЕДИНЯЕТЕСЬ

Итак, для таких данных...

ID | GroupID | Group_Level | Group_Values
1  | 1 | Division    | Value 1
2  | 1 | Department  | Value 2
3  | 1 | Class       | Value 3
4  | 2 | Division    | Value 1
5  | 2 | Department  | Value 2
6  | 2 | Class       | Value 3

у тебя было бы

SELECT
   Div.GroupID, Div.Group_Values, Dept.Group_Values, Cl.Group_Values
FROM
   MyTable Div
   JOIN
   MyTable Dept ON Div.GroupID = Dept.GroupID
   JOIN
   MyTable Cl ON Div.GroupID = Cl.GroupID
WHERE
   Div.Group_Level = 'Division'
   AND
   Dept.Group_Level = 'Department'
   AND
   Cl.Group_Level = 'Class'
person gbn    schedule 13.11.2011

Классический способ поворота к фиксированному количеству столбцов выглядит следующим образом:

select id,
max (case when group_level = 'Division' then Group_Values else null end) Division,
max (case when group_level = 'Department' then Group_Values else null end) Department,
max (case when group_level = 'Class' then Group_Values else null end) Class
from
YourTable
group by id
person Lord Peter    schedule 13.11.2011