Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 尝试在SQLServer2005/SSRS中找到一种优雅的方法将数据拆分为组_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 2005 尝试在SQLServer2005/SSRS中找到一种优雅的方法将数据拆分为组

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]是我的临时表五分位数的别名,因为本例部

我正试图找到将数据分成若干组的最佳方法,例如五分位数(5人一组)。我将使用此SQL为SSRS报告返回数据

我目前正在做的是在一个名为quintiles customer ID,customer Expense的临时表中选择3列,并添加一个行号。 数据按客户支出从高到低排序

-编辑-

不太确定我是否说得很清楚,但通过按客户支出订购临时表,当我将其分为几个组时,Q1是最高支出者,以此类推,Q5是我最低支出者

然后我使用下面的case语句将它们分为5组。[tmp]是我的临时表五分位数的别名,因为本例部分位于第二条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个客户

我只是觉得这不是解决问题的最好办法


我希望这是有意义的。

您在查询中尝试过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