2014-01-30 2 views
0

У меня есть некоторые данные, которые я хотел бы поделить на квартили на основе количества строк. Я попытался использовать ntile, чтобы сделать это, но с той частью, с которой я столкнулся, - это преобразование данных позже. Например: данные могут начать так:SQL quartiles transform

COLOR 
red  
orange 
blue 
purple 
yellow 
black 
pink 
green 

с помощью NTILE я получаю:

N | COLOR 
1 | yellow 
1 | red  
2 | purple 
2 | pink 
3 | orange 
3 | green 
4 | blue 
4 | black 

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

1  |2  |3  |4 
yellow |purple|orange |blue 
red |pink |green |black 

Спасибо.

+0

вы помечено вопрос с ответом: используйте сводной запрос –

+0

'MAX (случай, когда цвет =«желтого»THEN цвета END) как 1, 'так далее для каждого цвета.' GROUP BY' – Mihai

+0

Как бы я сделал это динамически? Это был просто упрощенный пример; реальные данные могут иметь более 100 значений на квартиль, поэтому жесткое кодирование невозможно. – user3254331

ответ

4

Вы можете использовать PIVOT, чтобы получить окончательный результат, но я бы также предложил использовать функцию оконной обработки, такую ​​как row_number(), чтобы получить ее. Функция windowing создаст уникальную последовательность для каждого color в вашем значении ntile.

Вы должны быть в состоянии использовать:

;with cte as 
(
    select ntile(4) over(order by color desc) n, color 
    from yourtable 
) 
select [1], [2], [3], [4] 
from 
(
    select n, color, 
    row_number() over(partition by n order by n) seq 
    from cte 
) d 
pivot 
(
    max(color) 
    for n in ([1], [2], [3], [4]) 
) piv; 

См SQL Fiddle with Demo

+0

Большое вам спасибо, я ценю это. – user3254331

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