我想从每个类别的表中选择随机问题

时间:2015-03-10 21:46:42

标签: sql-server database sql-server-2005 random

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

我有一张表有问题,所有问题都归类为TopicWise明智。

Table Questions

另一个表包含主题及其在主题中的数字权重

Table Topics

现在,我需要从表格QUESTIONS中选择50个随机问题,这些问题基于主题的权重,例如50个随机选择的问题必须有

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

请参阅第二张图片(表格主题)

主题的数量及其权重在不同主题中可能会有所不同,因此对于动态查询,联合声明将是一个坏主意。

我甚至还没有为这个选择找到一行代码。

3 个答案:

答案 0 :(得分:1)

您可以在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)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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