我有一个表,其中有两列数据是这样的:单双 号码
单号 1
单号 3
单号 5
双号 6
双号 4
双号 2我想这样排序,先排序“单双”列,然后,如果“单双”列的值为“单号”,则“号码”列从高到低排序;如果“单双”列的值为“双号”,则“号码”列从低到高排序,那么我需要的结果就这样:单双 号码
单号 5
单号 3
单号 1
双号 2
双号 4
双号 6请大家帮忙解决下,谢谢了!
单号 1
单号 3
单号 5
双号 6
双号 4
双号 2我想这样排序,先排序“单双”列,然后,如果“单双”列的值为“单号”,则“号码”列从高到低排序;如果“单双”列的值为“双号”,则“号码”列从低到高排序,那么我需要的结果就这样:单双 号码
单号 5
单号 3
单号 1
双号 2
双号 4
双号 6请大家帮忙解决下,谢谢了!
解决方案 »
- SQl2005中定义模式有什么作用
- 一个用户一个数据库,怎样使这用户不能改此数据库限制大小???
- xp系统上装个人版的SQL Server2000数据库,怎样实现 数据库网络共享
- 求一SQL语句,附上表结构和执行结果,望高手解答!急!!!
- 求助:学习SQL有什么好书?
- 如何用SQL语句修改作业调度时间啊?
- SQL Server 2005 中如何做全文检索
- 怎么将*.pdb,*.pdm 的数据库文件导入到sql server 数据库中
- SQL SERVER 2000數據庫在用的時候,是否可以取消其自動壓縮功能!
- INSERT...SELECT 出问题了
- 局域网内SQL连接数据库的命令
- 关于sql自定义函数参数问题
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
goselect * from tb
order by case when 单双='单号' then 1 else 2 end,
case when 单双='单号' then 号码 else -号码 end desc/**
单双 号码
---- -----------
单号 5
单号 3
单号 1
双号 2
双号 4
双号 6(6 行受影响)
**/
这个地方没有弄明白是什么意思,能否解释一下,谢谢
ORDER BY case when 单双='单号' then 号码 else -号码 end desc
这一个就可以实现了吧,为什么一楼要写两个阿?
个人理解:
如果为单号就为正数,如果为双号就为负数
在Desc 排序
会将单号放到前面,双号放在后面例如1
3
5
2
4
6排序如下:
5
3
1
-2
-4
-6