2010-11-09 49 views
1

我試圖找到將數據拆分爲組的最佳方式,例如昆泰(5個組)。我將使用這個SQL來爲SSRS報告帶回數據。試圖找到一種優雅的方式來將數據拆分爲SQL Server 2005/SSRS組中的數據

我目前正在做的是選擇3列到名爲#quintiles(客戶ID,客戶花費和增加一個rownumber)的臨時表中。 數據按客戶花費排序,從高到低排序。

CNC中

不太清楚,如果我明確表態,而是由顧客的花費訂購臨時表,當我把它分成組,Q1是最高的揮金如土,等等,與Q5成爲我的底杆。

然後我用下面的case語句將它們分組到5 TMP]是我的臨時表#quintiles別名,因爲這種情況下,部分是在第二個SELECT語句

CASE 
WHEN tmp.Row_number <= ((SELECT COUNT (*) FROM #quintiles)/5) 
THEN 'Q1' 
WHEN tmp.Row_number BETWEEN ((SELECT COUNT (*) FROM #quintiles)/5) AND ((SELECT COUNT (*) FROM #quintiles)*2/5) 
THEN 'Q2' 
WHEN tmp.Row_number BETWEEN ((SELECT COUNT (*) FROM #quintiles)*2/5) AND ((SELECT COUNT (*) FROM #quintiles)*3/5) 
THEN 'Q3' 
WHEN tmp.Row_number BETWEEN ((SELECT COUNT (*) FROM #quintiles)*3/5) AND ((SELECT COUNT (*) FROM #quintiles)*4/5) 
THEN 'Q4' 
WHEN tmp.Row_number > ((SELECT COUNT (*) FROM #quintiles)*4/5) 
THEN 'Q5' 
END 

該作品並且確實將客戶歸爲5個組。我不能只將總數除以5,就好像有奇數的客戶,我最終會在每個組中有0.5個客戶!

我只是不覺得這是解決問題的最好方法。

我希望它是有道理的。

回答

2

使用NTILE

SELECT 'Q' + CAST(NTILE(5) OVER (ORDER BY customer_spend) AS VARCHAR(1)) AS Quintile 
+0

太好了,謝謝你的例子。 – 2010-11-09 14:05:05

2

您是否在查詢中嘗試過NTILE(排名函數)? See here瞭解詳情。

+0

非常感謝,我不知道這一點,這是最有用的! – 2010-11-09 13:57:17

相關問題