在SQL Server 2008中查询每条记录的随机10%

时间:2011-04-06 23:39:10

标签: sql sql-server tsql

我们为每个客户审核10%的文件,并需要创建一个SQL脚本。我可以使用WHERE语句为每个客户端创建一个查询。但是,我需要为每个客户端运行它。如果我手动完成,我需要为每个客户端运行它。有没有办法在脚本中查询每个客户端的10%?

  

SELECT TOP 10 PERCENT b.loan_no

     

FROM借款人b JOIN客户c ON   b.clients_id = c.clients_id在哪里   b.funded> = '04 / 01/2011'和c.dba IN   'ABC公司'按NEWID订购()

2 个答案:

答案 0 :(得分:5)

使用master..spt_values的示例 - 调整到您的表格

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)

基本机制是在一个窗口中计算每个分区(客户端)的行数,在另一个窗口中计算row_number,并且仅抓取生成的行编号在所需的10%范围内。使用CEILING,如果你有一个2的样本,10%是0.2,它被舍入为1,所以你总是得到&gt; = 10%的记录。

答案 1 :(得分:2)

Select clients_id, Loans.loan_no
From clients As c
    Cross Apply (
                Select Top 10 Percent b.loan_no
                From borrower As b
                Where b.clients_id = c.clients_id
                    And b.funded >= '20110401'
                    And b.dba In( 'ABC Company' )
                Order By NewId()
                ) As Loans