0

我正在尝试获取一个结果集并将其分成三组不同大小的组。我一直在查看 ntile、rank、row number 但无法弄清楚。

我可以选择前 n%。但是我需要下一个 n%。

我需要分成以下不同大小的组。15%、42.5%、42.5%。创建一个 15% 的对照组和两个版本从剩余的记录中平均分割。

以前的要求是 50-50 拆分,我只是使用带有行号的模数,但不确定这是否也适用。

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

4

1 回答 1

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

于 2012-10-02T22:40:44.900 回答