2011-10-25 5 views
2

내부 통제를 위해 여러 송장 유형 및 지역 각각에 대해 하나의 무작위 송장을 선택하고 싶습니다.다른 쿼리를 기반으로 무작위 데이터베이스 행 선택

다음은 별개의 송장 종류와 지역이 내가 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

완벽! CTE가 해결책이 될 수 있다고 생각했지만 이전에는 사용하지 않았습니다. –

관련 문제