Выберите случайную строку базы данных на основе другого запроса - PullRequest
2 голосов
/ 25 октября 2011

Для внутреннего контроля мы хотели бы выбрать один случайный счет для каждого из нескольких типов счетов и регионов.

Вот SQL, чтобы получить набор различных типов счетов и регионов

  select InvoiceType,RegionID 
  from Invoices 
  group by InvoiceType, RegionID 

Для каждой возвращаемой строки мне нужно выбрать случайную строку с этими InvoiceType и RegionID.Вот как я выбираю случайные строки:

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() row, который возвращает первый оператор.Я мог бы сделать это программно, но я бы предпочел вариант, использующий только хранимую процедуру, поскольку для этого запроса не требуется программа.

1 Ответ

2 голосов
/ 25 октября 2011
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...