随机选择每个分组的行数等于

时间:2011-07-11 09:31:33

标签: sql-server-2005 tsql sql-server-2000

我有一个表SCCalls,其中有一列Call_CalT_CodeCall_CalT_Code可以是几个不同值之一。它还有一个Call_InDate列,我将过滤它。

我需要总共获得1000条随机记录(按Call_InDate过滤),每个Call_CalT_Code分配相同的数字。

我该怎么做?

编辑(gbn):解决方案必须处理SQL Server 2005上兼容模式80的数据库

1 个答案:

答案 0 :(得分:2)

您可能需要使用分部中的数字。

如果您有9个值,则1000/9 = 111,这样您只能获得999行。所以我使用了1100和之后的TOP 1000.

SELECT TOP 1000
   *
FROM
   (
   SELECT
       *,
       ROW_NUMBER() OVER (PARTITION BY Call_CalT_Code ORDER BY NEWID()) AS rn
    FROM
       MyTable
      ) foo
WHERE
    rn <= 1100 / (SELECT COUNT(distinct Call_CalT_Code) FROM MyTable)
ORDER BY
    rn