问题描述
我在 sql Server 中有一个包含用户活动的大表(表 A)和另一个包含用户列表的表(表 B)。
我需要遍历活动表并对每个用户进行序列化选择,并将新记录放入第三个表(表 C)中。
换句话说,对于表B中的每个用户,我需要从表A中获取1条匹配的记录,并将它们放入新的表C中,重复整个过程,直到每个人都得到x条记录。
最终的结果是,我可以在表 C 中得到一个分布式记录集,其中每个用户都被平等地代表。
解决方法
您可以使用窗口函数或横向连接。让我们做横向连接。如果您希望为每个用户随机选择记录:
select a.*
from b cross apply
(select top (x) a.*
from a
where a.user_id = b.user_id
order by newid()
) a;
当然,如果a
中没有足够的记录,那么有些用户的记录会更少。