【发布时间】:2019-05-22 07:25:45
【问题描述】:
我需要从表中选择随机行作为测试数据。有时我需要的测试数据行数可能多于表中的记录数。重复没问题。如何构建我的选择以便我可以获得重复的行?
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 行或我需要的任意数量。
【问题讨论】:
-
这里有几种解决方案。它们都有点奇怪,因为在关系数据世界中,您尝试做的事情相当奇怪。您可以使用另一个具有更多行的表并加入您的表,基本上创建一个笛卡尔。您可以使用交叉连接将表连接到自身。但无论你如何分割它,你最终可能会出现一些重复的行和一些根本没有返回的行。
-
是否有要求只有在没有足够的行来管理没有重复的情况下才应该返回重复?
-
行重复但有些行根本不返回也没关系。我希望能够扩展它以获得 100 行或 1000 行,或者我需要的任何数量。
-
听起来像是 Tally Table 的工作,然后您可以
CROSS JOIN处理您的数据以生成数百万行;然后只选择前 5 个... -
这里有几个答案。如果其中任何一个满足您的需求,请记住将其标记为已接受。
标签: sql sql-server tsql