我想 select 从每个类别的 Table 随机问题

I want to select random questions from a Table from each catogories

SQL需要Server 2005查询,请帮忙。

我有一个 table 有问题,所有问题都按 TopicWise 分类。

另一个table包含主题及其在主题中的权重

现在,我需要 select 来自 Table QUESTIONS 的 50 个随机问题,这些问题基于主题的权重,例如 50 个随机 selected 问题必须有

5 questions from Subtopic_Id=1 and    
15 questions from Subtopic_Id=2 and
10 questions from Subtopic_Id=3 and
10 questions from Subtopic_Id=4 and
10 questions from Subtopic_Id=5

查看第二张图片(Table 个主题)

并且主题的数量和权重可能因主题而异,因此 union 语句对于动态查询来说不是一个好主意。

我什至没有想出这个 selection 的一行代码。

除了使用动态 sql 并且对于每个子主题,使用 rand 的顺序进行查询并获得前 x 个数字,我真的没有看到任何其他方法。

select  * from (select Top 5 *
 from questions where subtopic_id=1
order by NEWID())a1

 union

select * from (

select Top 10 * 
 from questions where subtopic_id=2 
from dbo.spegg_AtgPrice_Diff
order by NEWID())
a2

and so on

您可以在 TOP 子句中使用列值。不是常识,但可以做到。

您可以在 TOP 子句中使用 TopicWeightage 列。

可以做到,但是您很少有机会编写这样的查询。您碰巧处于这种情况,因此解决方案类似于.....

SELECT Q.ExamQ_ID
FROM TopicTable t 
              CROSS APPLY ( 
                           SELECT TOP (t.TopicWeightage) ExamQ_ID
                           FROM Questions
                           WHERE SubjTopicID =  t.SubjTopic_ID
                           ORDER BY NEWID()  
                           ) Q(ExamQ_ID)