【发布时间】:2014-06-26 01:27:35
【问题描述】:
使用RAND() 函数或NEWID() 在每一列中生成一个随机值,如described 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
谢谢!
【问题讨论】:
-
在select中添加子查询而不是变量
-
这就是 RAND() 的工作原理——它只被评估一次。有关其他想法,请参阅 this question 和 this question。
-
@Serpiton 我以前试过,结果还是一样。
-
@AaronBertrand 谢谢,this link 很有帮助,但我不太清楚我应该如何在我的情况下应用它。你能指出我正确的方向吗?谢谢!
-
我怀疑您的问题更多是关于唯一 ID,但您可能会探索不同的随机播种方式。 SELECT AddressID, RAND(AddressID) AS Random FROM SalesLT.[Address]
标签: sql sql-server random