0
SELECT TOP 10 * 
FROM Questions TABLESAMPLE (100 ROWS) 
order by NEWID()

它每次返回相同的 10 条记录,但它们的顺序不同。如何每次获得一组不同的 10 个随机值?

4

3 回答 3

3

如果您只想要 10 个随机行,这将适合您:

SELECT TOP 10 *
FROM Questions
ORDER BY NEWID()

你不需要TABLESAMPLE (100 ROWS)这里


为了将结果保存到您的评论所指示的另一个表中,如果存在第二个表,您将能够轻松地执行此操作。那么你也能:

INSERT INTO RandomQuestions(col1, col2, col3, ...)
SELECT TOP (10) q.col1, q.col2, q.col3, ...
FROM Questions AS q
ORDER BY NEWID()
于 2012-10-25T16:57:22.600 回答
1

我相信您正在寻找订购随机记录。您可以使用派生表来执行此操作(我在下面为子查询起别名):

select *
from (
    -- Derived table to get 10 random rows
    select top 10 * 
    from Questions
    order by newid() -- Here we are randomizing the entire table.
) as a
order by a.QuestionID -- Here is where you can order your 10 random records.

根据文档tablesample,如果您确实需要随机记录,请不要使用:

如果您真的想要单个行的随机样本,请修改您的查询以随机过滤掉行,而不是使用 TABLESAMPLE。

于 2012-10-25T17:01:21.490 回答
0
SELECT TOP ### FROM Questions TABLESAMPLE order by NEWID()

用你想要的行数替换###。这是基于OP的想法。

于 2012-10-25T16:56:13.317 回答