首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于一个sql 的简单化

2013-12-17 
关于一个sql 的简化当qq.quesviewtype 1 时,随机获取24条记录,当qq.quesviewtype 2 时,随机获取15条记

关于一个sql 的简化



当qq.quesviewtype = 1 时,随机获取24条记录,
当qq.quesviewtype = 2 时,随机获取15条记录,
当qq.quesviewtype = 3 时,随机获取10条记录,
当qq.quesviewtype = 4 时,随机获取18条记录,

以下是一个条件的查询,可以使用union all 进行四个查询的合并,除此外,还是否有更简洁的写法:


select top 24 * from
         (select distinct(qq.questionid) questionid,qpv.paperviewid,qq.limitminute,qq.splitscore
   ,qq.optnum,qq.creator,qq.modifyStatus,qq.parentid,qq.questypeid
         ,qq.quesviewtype,qq.content,qq.answer,qq.analysis,qq.score,qq.status
      ,convert(varchar(100),qq.createtime,20) createtime
   from qz_question qq with (nolock)
   join qz_paper_question qpq with (nolock) on qq.questionid = qpq.questionid
   join qz_paper_view qpv with (nolock) on qpq.paperid = qpv.paperid
   join qz_point_question qpoq with (nolock) on qq.questionid = qpoq.questionid
   join qz_point qpo with (nolock) on qpoq.pointid = qpo.pointid
   where qpv.paperviewid = 27714
   and ((qq.parentid != 0) or (qq.parentid = 0 and qq.answer is not null))
   and qpo.pointlistid = 572
         and qq.quesviewtype = 1
         ) a order by newID()





[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你的意思是,你需要把4个查询,通过union all 合并?

然后想,简化这个语句,是吗

要四个查询,除了union all方法外还有没有更简洁的方式


你用的是2005吗,还是2000?

2005


试试这个:

select * from
         (select distinct(qq.questionid) questionid,qpv.paperviewid,qq.limitminute,qq.splitscore
   ,qq.optnum,qq.creator,qq.modifyStatus,qq.parentid,qq.questypeid
         ,qq.quesviewtype,qq.content,qq.answer,qq.analysis,qq.score,qq.status
      ,convert(varchar(100),qq.createtime,20) createtime
      ,ROW_NUMBER(PARTITION by qq.quesviewtype order by NEWID()) rownum
   from qz_question qq with (nolock)
   join qz_paper_question qpq with (nolock) on qq.questionid = qpq.questionid
   join qz_paper_view qpv with (nolock) on qpq.paperid = qpv.paperid
   join qz_point_question qpoq with (nolock) on qq.questionid = qpoq.questionid
   join qz_point qpo with (nolock) on qpoq.pointid = qpo.pointid
   where qpv.paperviewid = 27714
   and ((qq.parentid != 0) or (qq.parentid = 0 and qq.answer is not null))
   and qpo.pointlistid = 572
         --and qq.quesviewtype = 1
         ) a
       where  rownum <= CASE qq.quesviewtype WHEN  1 THEN 24 
                                   WHEN 2 THEN 15 
                                   WHEN 3 THEN 10 
                                   WHEN 4 THEN 18 
                        END  


[解决办法]
引用:
Quote: 引用:

报什么错呢?

关键字"by"附近有语法错误


改成这个试试:

select * from
         (select distinct(qq.questionid) questionid,qpv.paperviewid,qq.limitminute,qq.splitscore
   ,qq.optnum,qq.creator,qq.modifyStatus,qq.parentid,qq.questypeid
         ,qq.quesviewtype,qq.content,qq.answer,qq.analysis,qq.score,qq.status
      ,convert(varchar(100),qq.createtime,20) createtime
      ,ROW_NUMBER() over(PARTITION by qq.quesviewtype order by NEWID()) rownum
   from qz_question qq with (nolock)
   join qz_paper_question qpq with (nolock) on qq.questionid = qpq.questionid
   join qz_paper_view qpv with (nolock) on qpq.paperid = qpv.paperid
   join qz_point_question qpoq with (nolock) on qq.questionid = qpoq.questionid
   join qz_point qpo with (nolock) on qpoq.pointid = qpo.pointid
   where qpv.paperviewid = 27714
   and ((qq.parentid != 0) or (qq.parentid = 0 and qq.answer is not null))
   and qpo.pointlistid = 572
         --and qq.quesviewtype = 1
         ) a
       where  rownum <= CASE qq.quesviewtype WHEN  1 THEN 24 
                                   WHEN 2 THEN 15 
                                   WHEN 3 THEN 10 
                                   WHEN 4 THEN 18 
                        END  

热点排行