将一个表中的单行连接到另一个表中的 n 个随机行
Posted
技术标签:
【中文标题】将一个表中的单行连接到另一个表中的 n 个随机行【英文标题】:Join a single row in one table to n random rows in another 【发布时间】:2011-03-04 08:44:01 【问题描述】:是否可以在 SQL Server 中进行连接,将表 A 中的每一行连接到另一个中的 n 个随机行?例如,假设我有一个 Customer 表、一个 Product 表和一个 Order 表。我想将每个客户加入 5 个随机产品并将这些行插入到订单表中。 (并且每个客户都应该加入到他自己的 5 个随机行中,我不希望所有客户都加入到相同的 5 行中)。
这可能吗?我使用的是 SQL Server 2005,如果解决方案是特定的,那很好。
这是一个奇怪的要求,但我基本上是在制作一个小型数据生成器来生成一些随机数据。
【问题讨论】:
【参考方案1】:看看这样的东西
DECLARE @Products TABLE(
id Int,
Prod VARCHAR(10)
)
DECLARE @Customer TABLE(
id INT
)
INSERT INTO @Products SELECT 1, 'a'
INSERT INTO @Products SELECT 2, 'b'
INSERT INTO @Products SELECT 3, 'c'
INSERT INTO @Products SELECT 4, 'd'
INSERT INTO @Customer SELECT 1
INSERT INTO @Customer SELECT 2
--use a cross product select, BUT apply a random order number per customer,
--and only select the 'TOP N' items you require.
;WITH Vals AS (
SELECT c.id CustomerID,
p.id ProductID,
p.Prod,
ROW_NUMBER() OVER( PARTITION BY c.ID ORDER BY NEWID()) RowNumber
FROM @Customer c,
@Products p
)
SELECT *
FROM Vals
WHERE RowNumber <= 2
【讨论】:
以上是关于将一个表中的单行连接到另一个表中的 n 个随机行的主要内容,如果未能解决你的问题,请参考以下文章