2011-10-25 132 views
2

對於內部控制,我們希望爲多個發票類型和區域中的每一個選擇一個隨機發票。根據另一個查詢選擇隨機數據庫行

這裏的SQL來獲得一組不同的發票類型,部位

select InvoiceType,RegionID 
    from Invoices 
    group by InvoiceType, RegionID 

對於這個返回我需要與InvoiceTypeRegionID獲取一個隨機行的每一行的。這就是我如何獲取隨機行:

SELECT top 1 
    CustomerID 
    ,InvoiceNum 
    ,Name 
    FROM Invoices 
    JOIN Customers on Customers.CustomerID=Invoices.CustomerID 
where InvoiceType=X and RegionID=Y 
ORDER BY NEWID 

但我不知道該怎麼辦好這個SELECT語句foreach()行的第一個語句返回。我可以通過編程來實現,但我更喜歡只使用存儲過程的選項,因爲此查詢不需要程序。

回答

2
WITH cteInvoices AS (
    SELECT CustomerID, InvoiceNum, Name, 
      ROW_NUMBER() OVER(PARTITION BY InvoiceType, RegionID ORDER BY NEWID()) AS RowNum 
     FROM Invoices 
) 
SELECT c.CustomerID, c.InvoiceNum, c.Name 
    FROM cteInvoices c 
    WHERE c.RowNum = 1; 
+0

完美!我認爲CTE可能是解決方案,但我以前從未使用過它們。 –

相關問題