2016-08-18 5 views
1

я следующую таблицу:SQL Server: выбрать случайные строки каждого типа

id | customer | type 
---+----------+------ 
1 | Joe  | 5 
2 | Sally | 3 
3 | Joe  | 2 
4 | Sally | 1 
5 | Bob  | 5 
6 | Clark | 5 
7 | Daniel | 1 
8 | Mike  | 3 

и следующие данные:

count | type 
------+------ 
2  | 5 
1  | 1 
1  | 3 

или просто массив:

(5, 5, 1, 3) 

Мне нужно выбрать 2 случайных уникальных клиентов типа 5, 1 клиентов клиентов типа 1 и 1 типа 3 по одному запросу

ответ

3

Это похоже на подход юргена, но он будет работать с любой конфигурацией типов.

select t1.id 
    from 
     (
     select c.id, 
       t.count, 
       row_number() over (partition by t.type order by newid()) as rn 
      from customerTable c join typeTable t on c.type = t.type) as t1 
where t1.rn <= t1.count; 
+1

Спасибо! То, что мне нужно –

Смежные вопросы