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)
是否有捷径可寻?或者我应该将该表拆分为更多的表并为每个表生成随机然后将它们联合起来?
你可以用这个做CTE用ROW_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)
您可以轻松地通过以下方式执行此操作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)