一尘不染

SQL:如何从一个表中为另一行中的每一行获取随机的行数

sql

我有两个数据无关的表对于表A中的每一行,我想要例如表B中的3个随机行

使用游标很容易,但是速度很慢

那么我如何在单个语句中表达这一点以避免RBAR?


阅读 157

收藏
2021-05-23

共1个答案

一尘不染

要获得介于0到(N-1)之间的随机数,可以使用。

abs(checksum(newid())) % N

这意味着要获得1-N的正值,您可以使用

1 + abs(checksum(newid())) % N

注意:RAND()不起作用-每个查询批处理一次,并且您在tableA的所有行都使用相同的值。

查询:

SELECT *
  FROM tableA A
  JOIN (select *, rn=row_number() over (order by newid())
          from tableB) B ON B.rn <= 1 + abs(checksum(newid())) % 9

(假设您希望每个A最多有9个B随机行)

2021-05-23