xpt*_*xpt 8 sql t-sql sql-server
这是一个很难回答的简单问题,因为"挑选"具有特殊含义.
我需要为每个人提供三个随机选择(并给出选择/行号1,2和3).难以理解的是,这些人和选秀权来自不同的牌桌,并且这些人和选秀权之间没有逻辑联系.
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
Run Code Online (Sandbox Code Playgroud)
我知道以上不是人和选择,但它是一个有效的SQL,任何人都可以测试它而不创建人和首先选择表.和,
它说明了我面临的问题 -
上面的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
Run Code Online (Sandbox Code Playgroud)
检查alias名称in Where子句LHS和RHS是相同的table,column只是为databases表中的每一行执行子查询