2011-10-25 20 views
2

内部統制については、複数の請求書タイプおよび地域ごとに1つのランダム請求書を選択したいと考えています。別のクエリに基づいてランダムなデータベース行を選択

は、ここで明確な請求書の種類と地域これは私がInvoiceTypeRegionIDことでランダムな行をフェッチする必要が返す行ごとに

select InvoiceType,RegionID 
    from Invoices 
    group by InvoiceType, RegionID 

のセットを取得するSQLです。

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

完璧!私はCTEsが解決策かもしれないと思ったが、私は以前にそれらを使ったことがない。 –

関連する問題