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

时间:2010-06-16 08:35:04

标签: sql sql-server join random

是否可以在SQL服务器中进行连接,将表A中的每一行连接到另一行中的n个随机行?例如,假设我有一个Customer表,一个Product表和一个Order表。我想将每个客户加入5个随机产品,并将这些行插入订单表。 (并且每个客户应该加入他自己的5个随机行,我不希望所有客户加入相同的5行)。

这可能吗?我正在使用SQL Server 2005,如果解决方案特定于此,那就没问题了。

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

1 个答案:

答案 0 :(得分:8)

看看这样的事情

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