sql - 使用 ORDER BY NEWID() 生成随机测试数据,包括重复行
问题描述
我需要从表中为测试数据选择随机行。有时我需要的测试数据行数可能多于表中的记录数。重复没问题。如何构建我的选择以便我可以获得重复的行?
CREATE TABLE [Northwind].[dbo].[Persons]
(PersonID int, LastName varchar(255))
INSERT INTO [Northwind].[dbo].[Persons]
VALUES
(1, 'Smith'),
(2, 'Jones'),
(3, 'Washington')
SELECT TOP 5 *
FROM [Northwind].[dbo].[Persons]
ORDER BY NEWID()
如何让 Select 语句以随机顺序给我五个记录,并重复?目前,它仅以随机顺序返回三个。
我希望能够扩展它以获得 100 行或 1000 行,或者我需要的任何数量。
解决方案
使用递归 CTE 合并足够多的行,使它们比您想要的大。然后像以前一样从中选择。
declare
@desired int = 5,
@actual int = (select count(*) from persons);
with
persons as (
select personId,
lastName,
batch = 0
from Persons
union all
select personId,
lastName,
batch = batch + 1
from persons
where (batch + 1) * @actual < @desired
)
select
top (@desired) personId, lastName
from persons
order by newid()
推荐阅读
- gensim - Gensim 和 Mallet 的整体一致性
- php - 通过 slug 或标题 wordpress 获取页面内容
- dfd - DFD 是真实的还是只是学术的?
- r - 试图总结 R 中网格单元内的线长
- selenium-webdriver - 如何在网站上创建我自己的 xpath - Selenium
- excel - Excel VBA在过滤范围意外结果上设置值
- url-rewriting - How to rewrite URL in Oracle Content and Experience
- html - 如何向 itemTpl 中定义的组件添加侦听器?
- arduino - Arduino + SIM800A 消息被截断
- javascript - Sequelize:声明了外键,但没有出现在表中