2016-08-18 162 views
1

我具有以下表中的每個類型的隨機行:SQL服務器:選擇

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個客戶和類型3的1個客戶在一個請求中

回答

3

這就像juergen的方法,但它可以處理任何類型的配置。

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

謝謝!正是我需要的 –