How to quot;pickquot; random records with T-SQL(如何“挑选使用 T-SQL 随机记录)
问题描述
这是一个简单的问题,实际上很难回答,因为采摘"有特殊的含义.
This is a simple question that is actually hard to answer, because the "picking" has a special meaning.
我需要为每个人随机选择三个(并给出选择/行号 1、2 和 3).让人难受的是,persons 和picks 来自不同的表,并且person 和picks 之间没有逻辑连接.
I need to give three random picks for each person (and give pick/row number of 1, 2, and 3). What makes it hard is that the persons and picks are from different tables and there is no logical joining between the person and picks.
我能得到的最接近的是:
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,任何人都可以在不创建个人和选择表的情况下对其进行测试.还有,
I know the above is not person and picks, but it a working SQL that anyone can test it out without creating person and picks tables first. And,
它说明了我面临的问题 --
It illustrates the problem I'm facing --
上面的 SQL 会给每个人相同的选择,而我需要给不同的人不同的选择.
the above SQL will give each person the same picks, whereas I need to give different person different picks.
怎么做?谢谢.
推荐答案
在 CROSS APPLY
中添加相关条件将解决您的问题
Adding a correlated condition inside the CROSS APPLY
will solve your problem
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
检查Where
子句中的alias
名称,LHS和RHS都来自同一个table
和同一个column
只是对databases
表
Check the alias
name in Where
clause both LHS and RHS are from same table
and same column
it is just to execute the sub-query for each row in databases
table
这篇关于如何“挑选"使用 T-SQL 随机记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何“挑选"使用 T-SQL 随机记录
基础教程推荐
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01