2015-05-30 3 views
4

У меня есть таблица вроде этого:Как выбрать PIVOT для этой таблицы?

Id   Code     Value 
----------- -------------------- ----------- 
1   A     100 
2   B     100 
3   C     220 
4   A     150 
5   C     300 
6   D     120 
7   E     120 

И это мое ожидание:

Code1  Value1  Code2  Value2  Code3  Value3 
----------- ----------- ----------- ----------- ----------- ----------- 
A   100   B   100   C   220 
A   150   C   300   D   120 
E   120 

Должен ли я использовать PIVOT в этом случае (и как это сделать) или нормальный запрос на выборку?

+1

Я не вижу никакой логики Беха от ожидаемого результата. Объясните. –

+0

Логика в этом случае берет каждую строку (один за другим) в Code1 Value1, затем Code2 Value2, а затем Code3 Value3 и возвращается к Code1 Value1. –

ответ

2

Это не с шарниром либо, но в случае, если вам нужно сгруппировать элементы в группы из 3 заказанных ID и ID имеет пробелы, как иногда бывает, это должно сделать это:

select 
    ROW, 
    max(case when COL = 0 then Code end) as Code1, 
    max(case when COL = 0 then Value end) as Value1, 
    max(case when COL = 1 then Code end) as Code2, 
    max(case when COL = 1 then Value end) as Value2, 
    max(case when COL = 2 then Code end) as Code3, 
    max(case when COL = 2 then Value end) as Value3 
FROM (
    select 
    (row_number() over (order by ID)-1) % 3 as COL, 
    (row_number() over (order by ID)-1)/3 as ROW, 
    Code, 
    Value 
    from 
    data 
) X 
group by ROW 

Это вычисляет номера строк и столбцов на основе row_number, что увеличивает над ID, а затем использует группу, чтобы разделить результаты на группы по 3.

SQL Fiddle

+0

Woah, я не знал о SQL Fiddle. Это потрясающе! – redbmk

1

Возможно PIVOT здесь не пригодится.

SELECT t1.code as code1, t1.value as value1, 
     t2.code as code2, t2.value as value2, 
     t3.code as code3, t3.value as value3 
FROM tab as t1 
    left join tab as t2 
     ON t1.id = t2.id - 1 
    left join tab as t3 
     ON t2.id = t3.id - 1 
where ((t1.id-1) % 3) = 0   
Смежные вопросы