我们为每个客户审核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订购()
答案 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