3 votes

Interrogation de 10 pour cent au hasard pour chaque enregistrement dans SQL Server 2008

Nous auditions 10% des fichiers pour chacun de nos clients et avons besoin de créer un script SQL. Je peux créer une requête pour chaque client en utilisant une déclaration WHERE. Cependant, j'ai besoin qu'elle s'exécute pour chaque client. Si je le faisais manuellement, je devrais exécuter cela pour chaque client individuel. Y a-t-il un moyen d'interroger les 10% pour chaque client dans un script?

SELECT TOP 10 PERCENT b.loan_no

FROM borrower b JOIN clients c ON b.clients_id = c.clients_id WHERE b.funded >= '01/04/2011' AND c.dba IN 'ABC COMPANY' ORDER BY NEWID()

5voto

RichardTheKiwi Points 58121

Exemple utilisant master..spt_values - ajustez à votre table

select a.*
from 
(
    select *,
        rn=ROW_NUMBER() over (partition by type order by newid()),
        COUNT(*) over (partition by type) countPerType
    from master..spt_values
) a
where rn <= ceiling(countPerType*10.0/100)

Le mécanisme de base consiste à compter combien de lignes il y a par partition (client) dans une fenêtre, et dans un autre, le numéro de ligne dans chaque partition, et à ne récupérer que là où le numéro de ligne produit est dans la plage de 10% requise. CEILING est utilisé de sorte que si vous aviez un échantillon de 2, 10% est de 0,2 ce qui est arrondi à l'UP à 1, donc vous finissez toujours par avoir >= 10% des enregistrements.

2voto

Thomas Points 42973
Sélectionner clients_id, Loans.loan_no
De clients Comme c
    Cross Apply (
                Sélectionnez Top 10 Pourcent b.loan_no
                De prêteur Comme b
                Où b.clients_id = c.clients_id
                    Et b.funded >= '20110401'
                    Et b.dba Dans( 'ABC Company' )
                Trier Par NewId()
                ) Comme Prêts

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X