我正在尝试将结果集分成三组,大小不同。我一直在看ntile,rank,row number但是无法弄明白。
我可以选择前n%。但我需要接下来的n%。
我需要分成以下不同大小的组。 15%,42.5%,42.5%。创建一个15%的控制组,两个版本从剩余的记录中平分。
以前的要求是50-50分割,我只是将模数与行号一起使用,但不确定这是否适用于此。
我可以编写更新语句或存储过程来完成此操作,但我很乐意在查询中执行此操作。
答案 0 :(得分:0)
这或类似的东西应该这样做:
DECLARE @TotalRows float
SELECT @TotalRows = count(*)
from MyTable
SELECT Col1, Col2, ColEtc, Ranking
,case
when Ranking < @TotalRows * .15 then 1
when Ranking < @TotalRows * .575 then 2
else 3
end Ranking
from (select Col1, Col2, ColEtc
,row_number() over (order by Col1) Ranking
from MyTable) xx
order by xx.Ranking, xx.Col1, xx.Col2
这两个查询可以与CTE结合,但这似乎过于复杂。您需要检查特定于您的数据的边缘情况。