根据行号细分记录

时间:2017-06-10 07:06:42

标签: sql-server

我根据他们所居住的国家/地区拥有一些用户记录。假设他们都住在美国。我想将总用户分为4组。这些组应该是,如果总共有5000个用户,那么每个段应该有1250个用户。我尝试在ROW_NUMBER的基础上这样做。我得到了每条记录的计数,如1,2,3等等,直到5000.但我需要在相同的查询中做到这一点,而不知道我有的总记录。我尝试通过选择RowNumber< = MAX(Rownumber)/ 4等记录来做到这一点。如果有人可以建议我的逻辑,因为我无法共享查询或记录。提前谢谢。

3 个答案:

答案 0 :(得分:0)

您可以找到总和,并将其分为4个

    result = 5000/4
0 to result
result+1 to result*2
result*2+1 to result*3
result*3+1 to result*4

并使用以下内容    `SELECT *     从        (选择rownum rnum           , 一个。*        来自某事a       按名称排序      ) 在10和20之间的最小值; 您甚至可以从with子句中的子句移动它,如下所示

WITH b AS     (选择rownum rnum       , 一个。*    从某个ORDER BY名称     )    SELECT * FROM b     在10和20之间的任何地方;`

refereed enter link description here

答案 1 :(得分:0)

如何使用case语句创建组,然后在where子句中引用它们?这也让您有机会创建更多/更少的组。所以像:

select *, case when RowNumber<=MAX(Rownumber) then group4
               when RowNumber<=MAX(Rownumber)/4*3 then group3
               when RowNumber<=MAX(Rownumber)/4*2 then group2
               when RowNumber<=MAX(Rownumber)/4 then group1 END AS groupvariable
from "your table"

您可以尝试在初始脚本中创建case语句(创建一个新表),这也可以让您分别更改组的数量,但不确定sql是否允许您创建组并在其中过滤相同的查询

答案 2 :(得分:0)

你可以使用如下的ntile:

    Select *, [Segment] = ntile(4) over(partition by Users order by [RowNumber]) from YourTable

此处它将根据您的列的用户订单提供4个细分...我在此提及RowNumber,考虑到您的表格中有一些序列号