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的批量修改字段语句构建!求助