使用子查询来拉随机值每次都会显示相同的值

问题描述 投票:12回答:2

我想使用T-SQL for Microsoft SQL Server 2008 R2向查询中的列添加随机值。为此,我使用子查询并拉随机记录。每次运行查询时,它都会提取一个新的随机记录,但每行的值都是相同的。

如何为每行获取新的随机值?

示例查询:

SELECT column1,
    (SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID())
FROM Table1

而table2看起来像

column1
value1
value2
value3

它始终为column2返回相同的值,而不是每个表的新随机记录。

第一次运行:

column1, c2
1, value1
2, value1
3, value1

第二轮:

column1, c2
1, value2
2, value2
3, value2

如何让c2(子查询)为每一行提取一个新的随机记录?

理想情景:

column1, c2
1, value2
2, value1
3, value2
sql sql-server tsql random
2个回答
17
投票

尝试:

SELECT column1,
    (SELECT TOP 1 column1 as c2 FROM Table2 WHERE Table1.column1 IS NOT NULL ORDER BY NewID())
FROM Table1

7
投票

你可以试试

SELECT T1.column1,
    (SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID(), LEN(T1.column1))
FROM Table1 T1

强制它每次重新评估选择。但这将是非常低效的。也非常脆弱(没有LEN它不起作用!)它是否满足你的要求,随机排序一次T2值(或者如果Table1大于Table2可能更多)然后通过row_number加入?

我可以通过这些方法看到的主要区别是,您当前的方法将允许多次选择相同的随机行,而我提出的方法不会。

© www.soinside.com 2019 - 2024. All rights reserved.