Sql server 2005 尝试在SQLServer2005/SSRS中找到一种优雅的方法将数据拆分为组
我正试图找到将数据分成若干组的最佳方法,例如五分位数(5人一组)。我将使用此SQL为SSRS报告返回数据 我目前正在做的是在一个名为quintiles customer ID,customer Expense的临时表中选择3列,并添加一个行号。 数据按客户支出从高到低排序 -编辑- 不太确定我是否说得很清楚,但通过按客户支出订购临时表,当我将其分为几个组时,Q1是最高支出者,以此类推,Q5是我最低支出者 然后我使用下面的case语句将它们分为5组。[tmp]是我的临时表五分位数的别名,因为本例部分位于第二条SELECT语句中Sql server 2005 尝试在SQLServer2005/SSRS中找到一种优雅的方法将数据拆分为组,sql-server-2005,tsql,Sql Server 2005,Tsql,我正试图找到将数据分成若干组的最佳方法,例如五分位数(5人一组)。我将使用此SQL为SSRS报告返回数据 我目前正在做的是在一个名为quintiles customer ID,customer Expense的临时表中选择3列,并添加一个行号。 数据按客户支出从高到低排序 -编辑- 不太确定我是否说得很清楚,但通过按客户支出订购临时表,当我将其分为几个组时,Q1是最高支出者,以此类推,Q5是我最低支出者 然后我使用下面的case语句将它们分为5组。[tmp]是我的临时表五分位数的别名,因为本例部
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个客户
我只是觉得这不是解决问题的最好办法
我希望这是有意义的。您在查询中尝试过NTILE排名功能吗?
详细信息。您在查询中是否尝试了NTILE排名功能? 有关详细信息,请使用NTILE
SELECT 'Q' + CAST(NTILE(5) OVER (ORDER BY customer_spend) AS VARCHAR(1)) AS Quintile
使用NTILE
SELECT 'Q' + CAST(NTILE(5) OVER (ORDER BY customer_spend) AS VARCHAR(1)) AS Quintile