select * from test where subject in ("math","english","geographic","history")

解决方案 »

  1.   

    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()
      

  2.   

    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
      

  3.   

    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()
      

  4.   

    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()
      

  5.   

    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()
      

  6.   

    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()
      

  7.   

    不刷新,发现大家又给了一些办法!谢谢谢谢!
    不过ADO给提示: order by 只能在第一个 union 前,不能哪个都 order by newid() ,所以以上几楼的办法试过不可行。
    二楼的办法我试试。
      

  8.   

    用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
      

  9.   

    to
     xiaoxing2003(小新) 
    newid()就是随机
      

  10.   

    这个肯定没有问题,我测试过的: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
      

  11.   

    to 好人 
      知道你说的,但我用了子查询就消除了这个限制to 楼上
       你的newid() as a是多余
      

  12.   

    大力,你试试,没有newid() as a会出错
      

  13.   

    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()
      

  14.   

    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()
      

  15.   

    还是每一条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()