SQL列中每个不同值的随机N行

buc*_*lad 0 sql t-sql sql-server random

我有下表:

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
Run Code Online (Sandbox Code Playgroud)

我需要一个SQL查询,它会为列Field上的每个不同值生成一个包含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
Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?或者我应该将该表拆分为更多的表并为每个表生成随机然后将它们联合起来?

Siy*_*ual 6

你可以用这个做CTEROW_NUMBER(),而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
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle

  • @bucurvlad “OVER”子句中的“ORDER BY NewId()”部分将在每个不同的字段编号中随机对它们进行排序。然后,这将按随机顺序选择前五个。 (2认同)

Gor*_*off 5

您可以轻松地通过以下方式执行此操作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;
Run Code Online (Sandbox Code Playgroud)