Sql 将一个表中的一行连接到另一个表中的n个随机行
是否可以在SQL server中创建一个联接,将表a中的每一行联接到另一个表中的n个随机行?例如,假设我有一个客户表、一个产品表和一个订单表。我想将每个客户加入5个随机产品,并将这些行插入订单表。每个客户都应该加入他自己的5个随机行,我不希望所有客户都加入相同的5行 这可能吗?我使用的是SQLServer2005,如果解决方案专门针对这一点,那就没问题了Sql 将一个表中的一行连接到另一个表中的n个随机行,sql,sql-server,join,random,Sql,Sql Server,Join,Random,是否可以在SQL server中创建一个联接,将表a中的每一行联接到另一个表中的n个随机行?例如,假设我有一个客户表、一个产品表和一个订单表。我想将每个客户加入5个随机产品,并将这些行插入订单表。每个客户都应该加入他自己的5个随机行,我不希望所有客户都加入相同的5行 这可能吗?我使用的是SQLServer2005,如果解决方案专门针对这一点,那就没问题了 这是一个奇怪的要求,但我基本上是制作一个小型数据生成器来生成一些随机数据。看看类似的东西 DECLARE @Products TABLE(
这是一个奇怪的要求,但我基本上是制作一个小型数据生成器来生成一些随机数据。看看类似的东西
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