Luc*_*cas 12 sql t-sql sql-server random
我想使用T-SQL for Microsoft SQL Server 2008 R2向查询中的列添加随机值.为此,我使用子查询并拉随机记录.每次运行查询时,它都会提取一个新的随机记录,但每行的值都是相同的.
如何为每行获取新的随机值?
示例查询:
SELECT column1,
(SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID())
FROM Table1
Run Code Online (Sandbox Code Playgroud)
而table2看起来像
column1
value1
value2
value3
Run Code Online (Sandbox Code Playgroud)
它始终为column2返回相同的值,而不是每个表的新随机记录.
第一次运行:
column1, c2
1, value1
2, value1
3, value1
Run Code Online (Sandbox Code Playgroud)
第二轮:
column1, c2
1, value2
2, value2
3, value2
Run Code Online (Sandbox Code Playgroud)
如何让c2(子查询)为每一行提取一个新的随机记录?
理想情景:
column1, c2
1, value2
2, value1
3, value2
Run Code Online (Sandbox Code Playgroud)
Tho*_* Li 17
尝试:
SELECT column1,
(SELECT TOP 1 column1 as c2 FROM Table2 WHERE Table1.column1 IS NOT NULL ORDER BY NewID())
FROM Table1
Run Code Online (Sandbox Code Playgroud)
你可以试试
SELECT T1.column1,
(SELECT TOP 1 column1 as c2 FROM Table2 ORDER BY NewID(), LEN(T1.column1))
FROM Table1 T1
Run Code Online (Sandbox Code Playgroud)
强制它每次重新评估选择.但这将是非常低效的.也非常脆弱(没有LEN
它不起作用!)它是否满足你的要求,随机排序一次T2值(如果Table1大于Table2,可能更多)然后通过row_number加入?
我可以通过这些方法看到的主要区别是,您当前的方法将允许多次选择相同的随机行,而我提出的方法不会.