select topic from (select top 20 topic , newid() as id from exams where 科目 = '数学' order by id) t union select topic from (select top 10 topic , newid() as id from exams where 科目 = '语文' order by id) t2 union select topic from (select top 15 topic , newid() as id from exams where 科目 = '英语' order by id) t3 or if you are using ADO.NET, you could utilize the NextRecordset method of Recordset object, and do three selects in a stored procedureselect top 20 topic from exams where 科目 = '数学' order by newid() select top 10 topic from exams where 科目 = '语文' order by newid() select top 15 topic from exams where 科目 = '英语' order by newid()
select * from (select top 20 * from 表 where 科目='数学' order by newid()) a union all select * from (select top 10 * from 表 where 科目='语文' order by newid()) a union all select * from (select top 15 * from 表 where 科目='英语' order by newid()) a
20道数学题,10道语文题,15道英select top 20 * from TAbleName where 科目='数学' order by newid() union all select top 10 * from TAbleName where 科目='语文' order by newid() union all select top 15 * from TAbleName where 科目='英语' order by newid()
select top 20 * from TAbleName where 科目='数学' order by newid() union all select top 10 * from TAbleName where 科目='语文' order by newid() union all select top 15 * from TAbleName where 科目='英语' order by newid()
select top 20 * from TAbleName where 科目='数学' order by newid() union all select top 10 * from TAbleName where 科目='语文' order by newid() union all select top 15 * from TAbleName where 科目='英语' order by newid()
select top 20 * from TAbleName where 科目='数学' order by newid() union select top 10 * from TAbleName where 科目='语文' order by newid() union select top 15 * from TAbleName where 科目='英语' order by newid()
不刷新,发现大家又给了一些办法!谢谢谢谢! 不过ADO给提示: order by 只能在第一个 union 前,不能哪个都 order by newid() ,所以以上几楼的办法试过不可行。 二楼的办法我试试。
用SELECT一次就取出我的试题库中随机的20道数学题,10道语文题,15道英语题?select * from(select top 20 * from 题库 where 科目='数学' order by newid()) a union all select * from(select top 10 * from 题库 where 科目='语文' order by newid()) b union all select * from(select top 15 * from 题库 where 科目='英语' order by newid()) c
to xiaoxing2003(小新) newid()就是随机
这个肯定没有问题,我测试过的:select 除a外的列的列表 from(select top 20 *,newid() as a from 题库 where 科目='数学' order by newid()) a union all select 除a外的列的列表 from(select top 10 *,newid() as a from 题库 where 科目='语文' order by newid()) b union all select 除a外的列的列表 from(select top 15 *,newid() as a from 题库 where 科目='英语' order by newid()) c
to 好人 知道你说的,但我用了子查询就消除了这个限制to 楼上 你的newid() as a是多余
大力,你试试,没有newid() as a会出错
select * from ( (select top 20 * from 表 where 科目='数学' order by newid()) union all (select top 10 * from 表 where 科目='语文' order by newid()) union all (select top 15 * from 表 where 科目='英语' order by newid()) ) a order by newid()
select * from ( (select top 20 * from 表 where 科目='数学') union all (select top 10 * from 表 where 科目='语文') union all (select top 15 * from 表 where 科目='英语') ) a order by newid()
还是每一条select都需要order by newid()的select * from ( (select top 20 * from 表 where 科目='数学' order by newid()) union all (select top 10 * from 表 where 科目='语文' order by newid()) union all (select top 15 * from 表 where 科目='英语' order by newid()) ) a order by newid()
union
select topic from (select top 10 topic , newid() as id from exams where 科目 = '语文' order by id) t2
union
select topic from (select top 15 topic , newid() as id from exams where 科目 = '英语' order by id) t3
or if you are using ADO.NET, you could utilize the NextRecordset method of Recordset object, and do three selects in a stored procedureselect top 20 topic from exams where 科目 = '数学' order by newid()
select top 10 topic from exams where 科目 = '语文' order by newid()
select top 15 topic from exams where 科目 = '英语' order by newid()
union all
select * from (select top 10 * from 表 where 科目='语文' order by newid()) a
union all
select * from (select top 15 * from 表 where 科目='英语' order by newid()) a
union all
select top 10 * from TAbleName where 科目='语文' order by newid()
union all
select top 15 * from TAbleName where 科目='英语' order by newid()
union all
select top 10 * from TAbleName where 科目='语文' order by newid()
union all
select top 15 * from TAbleName where 科目='英语' order by newid()
union all
select top 10 * from TAbleName where 科目='语文' order by newid()
union all
select top 15 * from TAbleName where 科目='英语' order by newid()
union
select top 10 * from TAbleName where 科目='语文' order by newid()
union
select top 15 * from TAbleName where 科目='英语' order by newid()
不过ADO给提示: order by 只能在第一个 union 前,不能哪个都 order by newid() ,所以以上几楼的办法试过不可行。
二楼的办法我试试。
union all
select * from(select top 10 * from 题库 where 科目='语文' order by newid()) b
union all
select * from(select top 15 * from 题库 where 科目='英语' order by newid()) c
xiaoxing2003(小新)
newid()就是随机
union all
select 除a外的列的列表 from(select top 10 *,newid() as a from 题库 where 科目='语文' order by newid()) b
union all
select 除a外的列的列表 from(select top 15 *,newid() as a from 题库 where 科目='英语' order by newid()) c
知道你说的,但我用了子查询就消除了这个限制to 楼上
你的newid() as a是多余
(select top 20 * from 表 where 科目='数学' order by newid())
union all
(select top 10 * from 表 where 科目='语文' order by newid())
union all
(select top 15 * from 表 where 科目='英语' order by newid())
) a order by newid()
(select top 20 * from 表 where 科目='数学')
union all
(select top 10 * from 表 where 科目='语文')
union all
(select top 15 * from 表 where 科目='英语')
) a order by newid()
(select top 20 * from 表 where 科目='数学' order by newid())
union all
(select top 10 * from 表 where 科目='语文' order by newid())
union all
(select top 15 * from 表 where 科目='英语' order by newid())
) a order by newid()