日期:2014-05-18  浏览次数:20442 次

[向晴天提问^_^]多条件排序
还是那个问题

SQL code
if object_id('t1') is not null
drop table t1
go
create table t1(id int,a int,b int)
insert t1
select 1, 6, 2009 union all
select 2, 2, 2008 union all
select 3, 0, 2011 union all
select 4, 3, 2011 union all
select 5, 5, 2012 union all
select 6, 4, 2013

go
drop table t1


回复已查看,多谢讲解,另外还是这个题目
(1)
select * from t1 order 1
是按照第一列排序吧?
(2)
那么select * from t1 order by case when a=5 then 1 else 0 end
这是将a=5是排到后面?难道不是当a=5时,按第一列排序?
(3)
那么select a,b from c order by case when a=5 then 1800 else b end

虽然你给我解释了,但是我现在又先入一种混乱了.如何区分这些情况,在什么时候用

还有有没有更详细的的教程...


------解决方案--------------------
坐等晴天来回答
------解决方案--------------------
把case when 用法看一下就行了
------解决方案--------------------
1. 以 select 列表中的第一列排序
2. 是的.没写desc,升序,0在前,1在后
3. 这个语句你少了 desc,在a=5时,取一个最小的年份,排序的时候是按
2013
2011
2011
2009
2008
1800
来排序的,把2012替换掉了.
------解决方案--------------------
(1)
select * from t1 order 1
是按照第一列排序吧? 是的

区分不了就看下面的结果

select c=(case when a=5 then 1800 else b end),a,b from c order by 1

------解决方案--------------------
看了下我也会

我替他回答,分给他


1、是按照第一列排序 通常不建议这种写法,因为不直观。

2、3 都可以这样理解
SQL code
select *,newcol= case when a=5 then 1 else 0 end from t1 order by newcol

------解决方案--------------------
探讨

看了下我也会

我替他回答,分给他


1、是按照第一列排序 通常不建议这种写法,因为不直观。

2、3 都可以这样理解
SQL code
select *,newcol= case when a=5 then 1 else 0 end from t1 order by newcol

------解决方案--------------------
參照聯機
http://technet.microsoft.com/zh-cn/library/ms181765%28SQL.90%29.aspx

教你另一方法

case when a=5 then 1800 else b end--這一段放在 select 處顯示