2016-02-01 37 views
0

每個不同的值我有以下表格:SQL隨機N行爲

Name Field 
A  1 
B  1 
C  1 
D  1 
E  1 
F  1 
G  1 
H  2 
I  2 
J  2 
K  3 
L  3 
M  3 
N  3 
O  3 
P  3 
Q  3 
R  3 
S  3 
T  3 

我需要一個SQL查詢,這將產生我一組與有關列字段每個不同的值5個隨機行。

例如,結果預計:

Name Field 
A   1 
B   1 
D   1 
E   1 
G   1 
J   2 
I   2 
H   2 
M   3 
Q   3 
T   3 
S   3 
P   3 

是否有一個簡單的方法來做到這一點?或者我應該將表分成更多的表並隨機生成每個表然後將它們聯合起來?

回答

3

你可以很容易地做到這一點與row_number()

select name, field 
from (select t.*, 
      row_number() over (partition by field order by newid()) as seqnum 
     from t 
    ) t 
where seqnum <= 5; 
5

您可以使用ROW_NUMBER()CTE做到這一點,而PARTITION荷蘭國際集團在Field

;With Cte As 
(
    Select Name, Field, 
      Row_Number() Over (Partition By Field Order By NewId()) RN 
    From YourTable 
) 
Select Name, Field 
From Cte 
Where RN <= 5 

SQL Fiddle

+0

但我需要的行是隨機的。這不會使我的行隨機。編輯:對不起,你是對的。感謝您的幫助 – bucurvlad

+1

@bucurvlad「OVER」子句中的ORDER BY NewId()'部分將在每個不同的字段編號中隨機排列。這將隨機選擇前五個。 – Siyual

+0

@bucurvlad添加SQL小提琴演示 – Siyual

0

的增強到Gordon Linoff's code,這段代碼真的幫助我,如果你需要標準ia在你的查詢中。

select * 
from (select t.*, 
      row_number() over (partition by region order by newid()) as seqnum 
     from MyTable t 
     WHERE t.program = 'ACME' 
    ) t 
where seqnum <= 1500;