2011-04-06 81 views
3

我們審計了每個客戶端的10%的文件,並且需要創建一個SQL腳本。我可以通過使用WHERE語句爲每個客戶端創建一個查詢。但是,我需要它爲每個客戶端運行。如果我手動完成,我需要爲每個客戶端運行此操作。有沒有辦法在腳本中查詢每個客戶端的10%?在SQL Server 2008中查詢每個記錄的隨機10%

SELECT TOP 10 PERCENT b.loan_no

FROM借款b JOIN客戶C ON b.clients_id = c.clients_id WHERE b.funded> = '04/01/2011' AND c.dba在 'ABC公司的ORDER BY NEWID()

回答

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 
+0

我刪除了'和b.dba In('ABC Company')'部分,它的效果很好。謝謝! – 2011-04-07 05:05:11

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,所以你總是以> = 10%的記錄結束。