我想 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)
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)