当前位置:数据库 > SQLServer >>

mssql联合查询问题[满意追加分]

查找数据库同一数据表name='abc'的数据,结果条数不确定,有可能为0条数据,最多12条数据。当不满足12条数据时,再查找name='123'的数据,条数加上前面name='abc'的数据,刚好12条。 要求: 1:结果要显示出name='abc'的全部数据。【当总条数小于12条时】 2:能按照id来排序,当name='abc'比如能查出3条,但有2条数据是最新添加的,也就是id【自增】最大的,结果要能降序,升序都先列出满足name='abc'的全部数据 一条sql语句完成
补充:to : shutao917
 top 12后面缺少*
union 后面要跟all才行,
这样查询出来的结果不满足要求,会出现第一个条件的数据没有


数据格式为:
         id       name
 1 123       
 2 123       
 3 123       
 4 123       
 5 123       
 6 abc       
 7 123       
 8 123       
 9 123       
 10 123       
 11 123       
 12 123       
 13 123       
 14 123       
 15 123       
 16 123       
 17 abc       
 18 abc       

mailking2001的代码拷进去执行完全正确的.
pjw_efan 的代码拷进去执行只显示了name='123'的数据列
刚好和我想要的结果写反了。在name后面加上desc就是正确的。
name='abc'的在前面。
mailking先回的帖子,就给他分吧
答案:select top 12 * from table where name='abc' or name='123' order by 
(case when name='abc' then 1  when name='123' then 0 else -1 end ) desc , ID desc 

这是查询前12条name='abc' 或者name='123'的语句 排序的顺序 name='abc'的总是排在前面,不够了使用name='123'来补,可以在前面的基础上使用ID来排序 
可以降序也可以升序 (升序要吧 ID 后面的desc 去掉)
其他:select top 12 from ttt where name='abc' or name='123' 
order by name desc,id 
这样吧? SELECT TOP 12 * 
FROM (SELECT TOP 12 * 
FROM 表 
WHERE name = 'abc' 
UNION 
SELECT TOP 12 * 
FROM 表
WHERE name = '123') a 
ORDER BY Name,id 
如果是123在前面就在name后面加上 desc select * from(

select count(name),name,(case name when 'abc' then '2',when '123' then 1 end) as x  from ttt where name in ('abc','123') group by name,x) where x>(
  case  count(name) when <12 then  0 when >12 then 1 end) order by name,id desc

不知道对不对!呵呵 (1)但有2条数据是最新添加的,也就是id【自增】最大的,结果要能降序,升序都先列出满足name='abc'的全部数据 

这个不太理解,

(2)pjw_efan 应该是对的,

(3)UNION 跟不跟 ALL主要看你要求不要求记录中存在重复记录。

上一个:在mssql中使用命令备份数据遇见数据库名有&怎么办?
下一个:MSSQL的批量修改字段语句构建!求助

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,