有表Test,假如有如下记录:
ID type question resulta resultb resultc resultd answer
1 单选题 问题1 选项A 选项B 选项C 选项D A
2 单选题 问题1 选项A 选项B 选项C 选项D B
3 多选题 问题1 选项A 选项B 选项C 选项D AB
4 单选题 问题1 选项A 选项B 选项C 选项D C
5 多选题 问题1 选项A 选项B 选项C 选项D AD
6 多选题 问题1 选项A 选项B 选项C 选项D BC
7 多选题 问题1 选项A 选项B 选项C 选项D AD
8 多选题 问题1 选项A 选项B 选项C 选项D CD
9 多选题 问题1 选项A 选项B 选项C 选项D BC
10 多选题 问题1 选项A 选项B 选项C 选项D BCD
11 多选题 问题1 选项A 选项B 选项C 选项D AB
12 多选题 问题1 选项A 选项B 选项C 选项D AD
13 多选题 问题1 选项A 选项B 选项C 选项D AC
14 多选题 问题1 选项A 选项B 选项C 选项D ABCD
15 单选题 问题1 选项A 选项B 选项C 选项D D
16 单选题 问题1 选项A 选项B 选项C 选项D B
注:ID为题目的ID,type为题的类型,qusetion为问题,resulta,b,c,d为题的四个选项,answer为问题的标准答案
现要求一条sql语句随机取出5道单选题记录和10道多选题记录(是随机取出,而且题目不能重复).小弟不会,特意来这请教各位大虾帮帮忙.解决立马结贴,在线等.分数不够可再加..谢谢大虾们帮忙..
------解决方案--------------------
- SQL code
select top 5 * from Test where len(answer)=1 order by newid()select top 10 * from Test where len(answer)>1 order by newid()
------解决方案--------------------
- SQL code
select top 100 percent * from (select top 5 * from tb where type = '单选题' order by newid()) tunion allselect top 100 percent * from (select top 10 * from tb where type = '多选题' order by newid()) t
------解决方案--------------------
- SQL code
declare @tb table (ID int,type varchar(6),question varchar(5),resulta varchar(5),resultb varchar(5),resultc varchar(5),resultd varchar(5),answer varchar(4))insert into @tbselect 1,'单选题','问题1','选项A','选项B','选项C','选项D','A' union allselect 2,'单选题','问题1','选项A','选项B','选项C','选项D','B' union allselect 3,'多选题','问题1','选项A','选项B','选项C','选项D','AB' union allselect 4,'单选题','问题1','选项A','选项B','选项C','选项D','C' union allselect 5,'多选题','问题1','选项A','选项B','选项C','选项D','AD' union allselect 6,'多选题','问题1','选项A','选项B','选项C','选项D','BC' union allselect 7,'多选题','问题1','选项A','选项B','选项C','选项D','AD' union allselect 8,'多选题','问题1','选项A','选项B','选项C','选项D','CD' union allselect 9,'多选题','问题1','选项A','选项B','选项C','选项D','BC' union allselect 10,'多选题','问题1','选项A','选项B','选项C','选项D','BCD' union allselect 11,'多选题','问题1','选项A','选项B','选项C','选项D','AB' union allselect 12,'多选题','问题1','选项A','选项B','选项C','选项D','AD' union allselect 13,'多选题','问题1','选项A','选项B','选项C','选项D','AC' union allselect 14,'多选题','问题1','选项A','选项B','选项C','选项D','ABCD' union allselect 15,'单选题','问题1','选项A','选项B','选项C','选项D','D' union allselect 16,'单选题','问题1','选项A','选项B','选项C','选项D','B' union allselect 17,'单选题','问题1','选项A','选项B','选项C','选项D','B' union allselect 18,'单选题','问题1','选项A','选项B','选项C','选项D','B'select * from (select top 5 * from @tb where type='单选题' order by newid()) Tunion all select * from (select top 10 * from @tb where type='多选题' order by newid()) T2order by type, id/*ID type question resulta resultb resultc resultd answer----------- ------ -------- ------- ------- ------- ------- ------1 单选题 问题1 选项A 选项B 选项C 选项D A4 单选题 问题1 选项A 选项B 选项C 选项D C15 单选题 问题1 选项A 选项B 选项C 选项D D17 单选题 问题1 选项A 选项B 选项C 选项D B18 单选题 问题1 选项A 选项B 选项C 选项D B3 多选题 问题1 选项A 选项B 选项C 选项D AB5 多选题 问题1 选项A 选项B 选项C 选项D AD6 多选题 问题1 选项A 选项B 选项C 选项D BC7 多选题 问题1 选项A 选项B 选项C 选项D AD8 多选题 问题1 选项A 选项B 选项C 选项D CD9 多选题 问题1 选项A 选项B 选项C 选项D BC10 多选题 问题1 选项A 选项B 选项C 选项D BCD11 多选题 问题1 选项A 选项B 选项C 选项D AB12 多选题 问题1 选项A 选项B 选项C 选项D AD13 多选题 问题1 选项A 选项B 选项C 选项D AC(15 row(s) affected)*/