Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我想从每个类别的表格中随机选择问题_Sql Server_Database_Sql Server 2005_Random - Fatal编程技术网

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

Sql server 我想从每个类别的表格中随机选择问题,sql-server,database,sql-server-2005,random,Sql Server,Database,Sql Server 2005,Random,需要SQL Server 2005查询,请帮助 我有一个有问题的表格,所有问题都按主题分类 另一个表包含主题及其在主题中的数字权重 现在,我需要从表问题中选择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 Sub

需要SQL Server 2005查询,请帮助

我有一个有问题的表格,所有问题都按主题分类

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

现在,我需要从表
问题
中选择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
请参见第二幅图(表主题)

而且主题的数量及其权重在不同的主题中可能会有所不同,所以union语句对于动态查询来说是个坏主意


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

除了使用动态sql,对于每个子主题,使用order by rand进行查询并获取top x编号之外,我真的看不到任何其他方法。

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

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子句中的
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)

亲爱的本杰明,共有10个主题,每个主题都有不同数量的主题,如图中有5个主题,但有一个主题有10个主题。所以union语句不会创建一个混乱的代码。这将是一个非常糟糕的查询,因为您将查看整个表中所有的主题类型。另外,如果你有50个主题类型,谁会编写这个查询:)为5个主题创建它将需要另外3次剪切和粘贴。这似乎是一个一次性的项目。如果它是重复出现的,我会建议在子主题id上建立一个索引,然后它会运行得很快。我看不到“第二张图片”,所以我不知道请求者所说的“不同主题的主题数量及其权重可能不同”是什么意思。@JamshaidRiaz基本上,本杰明·莫斯科维茨的答案中包含了什么,但将其创建为带查询的文本字符串,然后在该字符串上使用exec非常感谢@M.Ali,这太棒了。