【问题标题】:Join a single row in one table to n random rows in another将一个表中的单行连接到另一个表中的 n 个随机行
【发布时间】:2011-03-04 08:44:01
【问题描述】:

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

这可能吗?我使用的是 SQL Server 2005,如果解决方案是特定的,那很好。

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

【问题讨论】:

    标签: sql sql-server join random


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2020-12-11
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多