如何在插入后打乱 SQL 表中的行?由于某些原因,Newid 无法按预期工作

问题描述 投票:0回答:1

我目前正在使用 SQL 查询从两个表中检索数据并将其存储到名为 @folderTable 的临时表中。我想打乱结果中的所有行,以便整行的数据被随机化 这是我的查询的简化版本:


DECLARE @folderTable TABLE (FolderId int, QuestionsPerExam int, AvailableQuestions int);

INSERT INTO @folderTable (FolderId, QuestionsPerExam, AvailableQuestions)
    SELECT f.id, f.questions_per_exam, COUNT(q.id)
    FROM tbl_mcq_folder f
    LEFT JOIN tbl_mcq_questions q ON q.folder_id = f.id
    WHERE f.collaborator_id = 5 AND f.status = 1
    GROUP BY f.id, f.questions_per_exam
    ORDER BY NEWID();

执行此操作后,我希望@folderTable中的行被随机化,类似于:

随机播放前:

文件夹ID 每次考试的问题 可用问题
1 5 10
2 3 15
3 7 20

随机播放后:

文件夹ID 每次考试的问题 可用问题
2 3 15
1 5 10
3 7 20

我尝试使用 ORDER BY NEWID(),但它似乎没有在我的临时表上下文中按预期工作。

有没有办法打乱@folderTable中的所有行,以便每行数据以随机顺序出现?

预先感谢您提供的任何见解!..

(我正在使用 SQL Server)

sql sql-server
1个回答
0
投票

这里要理解的关键概念是 SQL 表基于“无序”记录集。 插入后 @folderTable 中的记录没有固有的内部顺序。 如果您想以随机顺序

查看
数据,则应在选择中使用NEWID()而不是插入:
SELECT FolderId, QuestionsPerExam, AvailableQuestions
FROM @folderTable
ORDER BY NEWID();

	
© www.soinside.com 2019 - 2024. All rights reserved.