使用控制组创建随机版本控制

时间:2012-10-02 22:20:19

标签: sql

我正在尝试将结果集分成三组,大小不同。我一直在看ntile,rank,row number但是无法弄明白。

我可以选择前n%。但我需要接下来的n%。

我需要分成以下不同大小的组。 15%,42.5%,42.5%。创建一个15%的控制组,两个版本从剩余的记录中平分。

以前的要求是50-50分割,我只是将模数与行号一起使用,但不确定这是否适用于此。

我可以编写更新语句或存储过程来完成此操作,但我很乐意在查询中执行此操作。

1 个答案:

答案 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结合,但这似乎过于复杂。您需要检查特定于您的数据的边缘情况。