当前位置: 代码迷 >> Sql Server >> *实在没有分了,小小的查询有关问题*
  详细解决方案

*实在没有分了,小小的查询有关问题*

热度:73   发布时间:2016-04-27 21:10:15.0
******实在没有分了,小小的查询问题*******
我想从一个表里根据关键字(querytext)查询出来相关的记录,如果查询出来记录不够5条,就用这个新闻类型(infoflag   )的最新录入的给拿出来补够5条,怎么做呢?
表结构
id         name       querytext     infoflag           inputtime
序号     名字       关键字             新闻类型           录入时间


------解决方案--------------------
select top 5 * from
(
select * from tb where querytext = '关键字 '
union all
select top 5 * from tb order by inputtime desc
) t
------解决方案--------------------
--添加辅助列,确保,如果=关键字的够5条,一定先取这5条,否则,取完这几条后,再按时间倒排序获取数据
--不要用union all,因为可能不满足5条时,刚好也是最近输入的,可能会显示重复行

select top 5 *
from
(
select *,1 as ID from tb where querytext = '关键字 '
union
select top 5 *,2 as id from tb order by inputtime desc
) t
order by id,inputtime desc

------解决方案--------------------
--添加辅助列,确保,如果=关键字的够5条,一定先取这5条,否则,取完这几条后,再按时间倒排序获取数据
--不要用union all,因为可能不满足5条时,刚好也是最近输入的,可能会显示重复行


楼上说的不错

不过UNION 本身就会去重复行,只要不用UNION ALL 而且选TOP 10 就好了
select top 5 *
from
(
select * from tb where querytext = '关键字 '
union
select top 10 * as id from tb order by inputtime desc
) t
order by id,inputtime desc
  相关解决方案