请教一个排序问题

cqnucsmoon 2010-06-21 10:44:17
我有一个表,其中有两列数据是这样的:

单双 号码
单号 1
单号 3
单号 5
双号 6
双号 4
双号 2

我想这样排序,先排序“单双”列,然后,如果“单双”列的值为“单号”,则“号码”列从高到低排序;如果“单双”列的值为“双号”,则“号码”列从低到高排序,那么我需要的结果就这样:

单双 号码
单号 5
单号 3
单号 1
双号 2
双号 4
双号 6

请大家帮忙解决下,谢谢了!
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ask_chang 2010-06-22
  • 打赏
  • 举报
回复
运行结果是正确的,但

case when 单双='单号' then 号码 else -号码 end desc


个人理解:


如果为单号就为正数,如果为双号就为负数
在Desc 排序
会将单号放到前面,双号放在后面

例如

1
3
5
2
4
6

排序如下:
5
3
1
-2
-4
-6
jacqueline_sujing 2010-06-21
  • 打赏
  • 举报
回复
SELECT * FROM TB
ORDER BY case when 单双='单号' then 号码 else -号码 end desc


这一个就可以实现了吧,为什么一楼要写两个阿?
cqnucsmoon 2010-06-21
  • 打赏
  • 举报
回复
运行结果是正确的,但

case when 单双='单号' then 号码 else -号码 end desc


这个地方没有弄明白是什么意思,能否解释一下,谢谢

cqnucsmoon 2010-06-21
  • 打赏
  • 举报
回复
谢谢,数据量不大,5000条左右。
claro 2010-06-21
  • 打赏
  • 举报
回复
如果数据量较大,建议用union all 分别取结果集的方式较好。
bancxc 2010-06-21
  • 打赏
  • 举报
回复
这是美女妈么[Quote=引用 1 楼 julietcheng 的回复:]
SQL code
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([单双] varchar(4),[号码] int)
insert [tb]
select '单号',1 union all
select '单号',3 union all
select '单号',5 union all
sel……
[/Quote]
美女她妈 2010-06-21
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([单双] varchar(4),[号码] int)
insert [tb]
select '单号',1 union all
select '单号',3 union all
select '单号',5 union all
select '双号',6 union all
select '双号',4 union all
select '双号',2
go

select * from tb
order by case when 单双='单号' then 1 else 2 end,
case when 单双='单号' then 号码 else -号码 end desc

/**
单双 号码
---- -----------
单号 5
单号 3
单号 1
双号 2
双号 4
双号 6

(6 行受影响)
**/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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