如何用T-SQL“选择”随机记录

这是一个很难回答的简单问题,因为“挑选”具有特殊含义.

我需要为每个人提供三个随机选择(并给出选择/行号1,2和3).难以理解的是,这些人和选秀权来自不同的牌桌,并且这些人和选秀权之间没有逻辑联系.

closest I can get是:

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

我知道以上不是人和选择,但它是一个工作的sql,任何人都可以测试它而不创建人和首先选择表.和,

它说明了我面临的问题 –

上面的sql会给每个人提供相同的选择,而我需要为不同的人提供不同的选择.

怎么做?谢谢.

解决方法

在CROSS APPLY中添加相关条件将解决您的问题
SELECT TOP 15 database_id,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

检查Where子句中的别名,LHS和RHS都来自同一个表,同一列只是为了对数据库表中的每一行执行子查询

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03