需要SQL Server 2005查询,请帮忙。
我有一张表有问题,所有问题都归类为TopicWise明智。
另一个表包含主题及其在主题中的数字权重
现在,我需要从表格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
请参阅第二张图片(表格主题)
主题的数量及其权重在不同主题中可能会有所不同,因此对于动态查询,联合声明将是一个坏主意。
我甚至还没有为这个选择找到一行代码。
答案 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