表中的TSQL随机值在每行中选择

时间:2014-05-08 14:57:04

标签: sql sql-server random

使用RAND()函数或NEWID()在每列中生成随机值described here,您可以在一行中生成随机值。但是......价值在每一行都重复相同。

enter image description here

如何为每列生成每行的随机值?我想在B1栏中显示一个随机产品,该产品也在组 102'中。 B2列相同但产品不同。而下一排再两个不同的产品等等。结果将显示每个产品(行)来自同一组的2个替代产品。

我的代码看起来像这样:

DECLARE @B1 varchar(30)
DECLARE @B2 varchar(30)
SET @B1 = (SELECT TOP 1 ItemCode FROM items WHERE items.Assortment IN (102) ORDER  BY RAND())
SET @B2 = (SELECT TOP 1 ItemCode FROM items WHERE items.Assortment IN (102) ORDER  BY NEWID())

SELECT ProdCode, ProdName, @B1 as B1, @B2 as B2
FROM Products
WHERE ProductGroup IN (102) --use IN so you can select multiple groups

谢谢!

2 个答案:

答案 0 :(得分:4)

您需要从主查询中添加一些内容,以便为每一行重新计算子查询 - 即:

SELECT 
    ProdCode, 
    ProdName, 
    (
        SELECT TOP 1 ItemCode 
        FROM items 
        WHERE items.Assortment IN (102) AND itemcode <> products.ProdCode
        ORDER BY NEWID(), products.ProdCode
    )
FROM Products
WHERE ProductGroup IN (102) 

答案 1 :(得分:-3)

通过使用while循环遍历表中的行,可以使用以下方法:

如果您在产品表上有ID列或其他内容或将其插入临时表来处理计算,则以下方法将有所帮助。

    DECLARE @MaxRowID INT
    DECLARE @RowID INT
    DECLARE @RandomNum FLOAT

    SET @RowID = 1

    SELECT @MaxRowID = MAX(ID) FROM Products

    WHILE ( @RowID <= @MaxRowID )
        BEGIN

            SET @RandomNum = RAND()

            UPDATE Products
            SET RandomNum = @RandomNum
            WHERE ID = @RowID

            SET @RowID = @RowID + 1

        END

    SELECT * FROM #Test

    DROP TABLE #Test