2011-07-11 3 views
1

J'ai une table, SCCalls, qui a une colonne Call_CalT_Code. Call_CalT_Code peut être l'une de plusieurs valeurs différentes. Il a également une colonne Call_InDate que je vais le filtrage par.Sélection aléatoire des rangées nombre égal par groupe

J'ai besoin d'obtenir 1000 enregistrements aléatoires (filtrés par Call_InDate) au total, répartis équitablement pour chaque Call_CalT_Code.

Comment est-ce que je peux faire ceci?

Edit (GBN): solution doit travailler sur une base de données qui est le mode de compatibilité 80 sur SQL Server 2005

+0

Il est plus difficile avec SQL Server 2000. Êtes-vous sûr que l'étiquette est correcte? Et est-ce "1000 par Call_CalT_Code" ou "1000 au total". On ne sait pas .. et les 2 demandes sont mutuellement exclusives ... – gbn

+0

Oui, les données est en 2000. Il est la nuit copié sur un serveur 2005, mais qui fonctionne en 2000 le mode de compatibilité (je sais!). –

+0

@gbn, il est 1000 au total, ne hésitez pas à modifier pour le rendre plus clair, ne sais pas comment je peux. –

Répondre

2

Vous devrez peut-être jouer avec les chiffres de la division.

Si vous avez 9 valeurs, puis 1000/9 = 111 donc vous devriez seulement obtenir 999 lignes arrière. Donc, j'ai utilisé 1100 et un TOP 1000 plus tard.

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 
Questions connexes