一SQL查询问题

shuma 2004-10-18 01:48:04
id name
1 aaXXX
2 aaXXXXXX
3 bbwwwww
4 ccrddrrrr
5 bbxesab
6 ccfgfgfg
7 ccrrrrrr
8 aannnnn
9 ccgggggg

按ID倒序,并要求,按主关键字cc,bb,aa排列
9 ccgggggg
5 bbxesab
8 aannnnn
7 ccrrrrrr
3 bbwwwww
6 ccfgfgfg
2 aaXXXXXX
...全文
279 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldljlq 2004-10-22
  • 打赏
  • 举报
回复
select * from tb order by left(name,2),id desc
lsxaa 2004-10-22
  • 打赏
  • 举报
回复
楼主试我最后写的那个么了?
shuma 2004-10-22
  • 打赏
  • 举报
回复
select * from tb order by name desc
这一句就搞定了,没有必要写得那么麻烦吧
楼主不信就用查续分析器测试一下

这个是不对的,出不来我要的效果。
zhjiang168 2004-10-19
  • 打赏
  • 举报
回复
呵呵……
Changefish 2004-10-19
  • 打赏
  • 举报
回复
楼上的有理 HOHO。。。。 -_-!!!
软件钢琴师 2004-10-19
  • 打赏
  • 举报
回复
select * from tb order by name desc
这一句就搞定了,没有必要写得那么麻烦吧
楼主不信就用查续分析器测试一下
lsxaa 2004-10-19
  • 打赏
  • 举报
回复
select id,name from 表 aa
order by (select count(*)
from 表
where ( (charindex('aa',aa.name)>0 and charindex('aa',name)>0) or
(charindex('bb',aa.name)>0 and charindex('bb',name)>0) or
(charindex('cc',aa.name)>0 and charindex('cc',name)>0)
) and id>aa.id )
,(case when (charindex('bb',name)>0 then 0
when (charindex('bb',name)>0 then 1
when (charindex('aa',name)>0 then 2
end )
prcgolf 2004-10-19
  • 打赏
  • 举报
回复
up
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
--tbccc 是我测试时用的表
select id,name from 表 aa
order by (select count(*) from 表 where left(name,2)=left(aa.name,2) and id>aa.id)
,(case left(name,2) when 'cc' then 0
when 'bb' then 1
when 'aa' then 2
end )
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
再贴一遍
select id,name from 表 aa
order by (select count(*) from tbccc where left(name,2)=left(aa.name,2) and id>aa.id)
,(case left(name,2) when 'cc' then 0
when 'bb' then 1
when 'aa' then 2
end )
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
那就是我写的最后那个了,楼主你试试
shuma 2004-10-18
  • 打赏
  • 举报
回复
id name
1 aa*******
2 aa*******
3 *****bb**
4 ****cc***
5 bb*******
6 cc*******
7 ****cc***
8 aa*******
9 cc*******
10 **bb*******
11 **aa*******
12 ****cc*******
13 *aa*******

按主关键字cc,bb,aa排列,按ID倒序检索,说白了就是,
先找关键字cc第一个,输出,再找bb第一个,输出,再找aa第一个,输出;
找关键字cc第二个,输出,再找bb第二个,输出,再找aa第二个,输出;
找关键字cc第三个,输出,再找bb第三个,输出,再找aa第三个,输出;
找关键字cc第四个,输出,再找bb第四个,输出,再找aa第四个,输出;
找关键字cc第五个,输出,再找bb第五个,输出,再找aa第五个,输出;
找关键字cc第六个,输出,再找bb第六个,输出,再找aa第六个,输出;
...........
12 ****cc*******
10 **bb*******
13 *aa*******
9 cc*******
5 bb*******
11 **aa*******
7 ****cc***
3 *****bb**
8 aa*******
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
--这个不是道,是不是楼主要的结果
select id,name from tbccc aa
order by (select count(*) from tbccc where left(name,2)=left(aa.name,2) and id>aa.id)
,(case left(name,2) when 'cc' then 0
when 'bb' then 1
when 'aa' then 2
end )
/*
9 ccgggggg
5 bbxesabr
8 aannnnn
7 ccrrrrrr
3 bbwwwww
2 aaXXXXXX
6 ccfgfgfg
1 aaXXX
4 ccrddrrrr

(所影响的行数为 9 行) */
yesyesyes 2004-10-18
  • 打赏
  • 举报
回复
select id,name from t
order by left(name,2) desc,id desc
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
9 ccgggggg
5 bbxesab
8 aannnnn
7 ccrrrrrr
3 bbwwwww
6 ccfgfgfg
2 aaXXXXXX

按照楼主的要求,最后一列的位置不对 2所在列应该排在6所在列的前面,是不是呢?
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
我上面写的那些都不对 好像没有那么简单
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
select id,name from t
order by id desc,left(name,2) desc,(case left(name,2) when 'cc' then 0
when 'bb' then 1
when 'aa' then 2
end)
Andy__Huang 2004-10-18
  • 打赏
  • 举报
回复
create table tb(id numeric(5), name varchar(100))
Insert into tb
select '1','aaXXX'
union all select '2','aaXXXXXX'
union all select '3','bbwwwww'
union all select '4','ccrddrrrr'
union all select '5','bbxesabr'
union all select '6','ccfgfgfg'
union all select '7','ccrrrrrr'
union all select '8','aannnnn'
union all select '9','ccgggggg'

select * from tb order by name desc
--結果
id name
---------------------
7 ccrrrrrr
4 ccrddrrrr
9 ccgggggg
6 ccfgfgfg
5 bbxesabr
3 bbwwwww
2 aaXXXXXX
1 aaXXX
8 aannnnn

是不是這個結果﹖
lsxaa 2004-10-18
  • 打赏
  • 举报
回复
select id,name from t
order by (case left(name,2) when 'cc' then id+2
when 'bb' then id+1
when 'aa' then id
else 0 end) desc

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧