2011-10-25 56 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可能是解决方案,但我以前从未使用过它们。 –

相关问题