2011-07-11 17 views
1

テーブルがSCCallsで、カラムがCall_CalT_Codeです。 Call_CalT_Codeは、いくつかの異なる値の1つになります。それはまた私がフィルタリングする列Call_InDateを持っています。グループの行ごとにランダムな選択を取得

ごとに均等に分散された合計1000個のランダムなレコード(Call_InDateでフィルタリング)を取得する必要があります。

どうすればいいですか?

編集(GBN):ソリューションは、あなたが部門の数字で遊んでする必要があるかもしれませんSQL Server 2005の

+0

SQL Server 2000では扱いにくいですか?タグは正しいですか?そして、これは "Call_CalT_Codeあたり1000"か "合計で1000"ですか?それは明らかではありません.2つの要求は互いに排他的です... – gbn

+0

はい、データは2000年です。2005年のサーバーに毎晩コピーされますが、それは2000年の互換モードで動作します(私は知っています!)。 –

+0

@gbn、合計で1000です。どうすればいいか分かりません。 –

答えて

2

上の互換モード80であるデータベースで作業する必要があります。

値が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 
関連する問題