Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将一个表中的一行连接到另一个表中的n个随机行_Sql_Sql Server_Join_Random - Fatal编程技术网

Sql 将一个表中的一行连接到另一个表中的n个随机行

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

是否可以在SQL server中创建一个联接,将表a中的每一行联接到另一个表中的n个随机行?例如,假设我有一个客户表、一个产品表和一个订单表。我想将每个客户加入5个随机产品,并将这些行插入订单表。每个客户都应该加入他自己的5个随机行,我不希望所有客户都加入相同的5行

这可能吗?我使用的是SQLServer2005,如果解决方案专门针对这一点,那就没问题了


这是一个奇怪的要求,但我基本上是制作一个小型数据生成器来生成一些随机数据。

看看类似的东西

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