2014-01-30 102 views
0

我有一些數據,我想根據行數劃分爲四分位數。我已經嘗試過使用ntile來做這件事,但是我遇到麻煩的部分是之後的數據轉換。例如:使用NTILE我得到SQL四分位數變換

COLOR 
red  
orange 
blue 
purple 
yellow 
black 
pink 
green 

:數據可能開出這樣的

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(CASE WHEN顏色= '黃',那麼顏色END)爲1,'對每種顏色都是如此.'GROUP BY' – Mihai

+0

我該如何動態地做到這一點?這只是一個簡單的例子;真正的數據可能每個四分位數有100多個值,所以硬編碼是不可能的。 – user3254331

回答

4

您可以使用PIVOT來獲得最終結果,但我也建議使用像row_number()這樣的窗口函數來獲取它。窗口函數將爲您的ntile值中的每個color創建一個唯一序列。

您應該能夠使用:

;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