如何使用SQL从500行中每次获得10个不同的随机行?

时间:2014-08-25 07:40:32

标签: sql sql-server

我创建了下表,此表有500个原始数据。

CREATE TABLE Education_question
(
  EducationId int IDENTITY(101,1),      
  EductionText Varchar(MAX)
);

在这种情况下我们实现了分页。在500个原始数据中,我们在单个商店程序调用中仅获取10个原始数据。第二次我调用相同的Store程序,它会给下一个10 raw。最重要的是我必须从剩余的原始中随机取出10个原始数据。 我解雇了下面的查询然后我得到了10行,但是在该数据中重复了一些原始数据(获得原始数据)。我如何得到10个不同的原料。

SELECT TOP(10) * FROM Education_question
ORDER BY NEWID()

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT DISTINCT TOP(10) * FROM chirag_Education_question ORDER BY NEWID()

答案 1 :(得分:0)

以下是获取所需结果的脚本:

DECLARE @idx int
DECLARE @TotalRows int
DECLARE @NewNumber int
DECLARE @RowNumbers TABLE(RowNum int)

SELECT @TotalRows = COUNT(*) FROM Education_question
SET @idx = 0

WHILE(@idx < 10)
BEGIN
    SELECT @NewNumber = RAND() * 10000
    WHILE(@NewNumber > @TotalRows)
    BEGIN
        SET @NewNumber = @NewNumber/10
    END
    IF NOT EXISTS (SELECT * FROM @RowNumbers WHERE RowNum = @NewNumber)
    BEGIN
        INSERT INTO @RowNumbers(RowNum) VALUES(@NewNumber)
        SET @idx = @idx + 1
    END
END
SELECT EducationId, EductionText FROM (SELECT ROW_NUMBER() OVER(ORDER BY EducationId) AS 
        RowId, * FROM Education_question) OrderedRecords 
WHERE RowId IN (SELECT RowNum FROM @RowNumbers)