这是一个简单的问题,其实很难回答,因为“挑”有特殊的含义。
我需要为每个人随机选择三个(并给出选择/行号 1、2 和 3)。困难之处在于人员和选择来自不同的表,并且人员和选择之间没有逻辑连接。
The 我能得到的最近的 https://stackoverflow.com/questions/41022467/ is:
SELECT TOP 15 database_id, create_date, RowNo, cs.name FROM sys.databases
CROSS apply (
SELECT top 3 Row_number()OVER(ORDER BY (SELECT NULL)) AS RowNo,*
FROM (SELECT top 3 name from sys.all_views ORDER BY NEWID()) T
) cs
我知道上面的内容不是 person 和 picks,但它是一个有效的 SQL,任何人都可以测试它,而无需先创建 person 和 picks 表。和,
它说明了我面临的问题——
上面的 SQL 会给每个人相同的选择,而我需要给不同的人不同的选择。
怎么做?谢谢。
在里面添加一个相关条件CROSS APPLY
会解决你的问题
SELECT TOP 15 database_id,
create_date,
RowNo,
cs.NAME
FROM sys.databases d
CROSS apply (SELECT TOP 3 Row_number() OVER(ORDER BY (SELECT NULL)) AS RowNo, *
FROM (SELECT TOP 3 NAME
FROM sys.all_views v
WHERE d.NAME = d.NAME --Here
ORDER BY Newid()) T) cs
检查alias
名字在Where
LHS 和 RHS 都来自同一个子句table
和一样column
它只是对每一行执行子查询databases
table
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)