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

sql中,求这样的分类排序的问题,在线等....
HTML code

分类排序的问题

例如表1:
num   finisted    finisttime
5      完成         13:10
1      未处理       
2      完成         20:09
35     完成         15:12
4      完成         14:11
56     未处理
6      完成         23:58
10     未处理

要达以下面这样的结果:
5      完成         13:10
4      完成         14:11
35     完成         15:12
2      完成         20:09
6      完成         23:58
1      未处理  
10     未处理     
56     未处理

我想实现在这样的分类排序: 先按finisted排序, 如果是完成的,再按finisttime排序, 如果是未处理的,再按num排序.
MS SQL2000中,这样的SQL语句如何写呢?




------解决方案--------------------
SQL code
order by finisted,(case when finisted='完成' then finisttime else num)

------解决方案--------------------
SQL code

if object_id('tb','U') is not null
   drop table tb
go
create table tb
(
 num int,
 finisted varchar(10),
 finisttime varchar(10)
)
go
insert into tb
select 5,'完成','13:10' union all
select 1,'未处理','' union all
select 2,'完成','20:09' union all
select 35,'完成','15:12' union all
select 4,'完成','14:11' union all
select 56,'未处理','' union all
select 6,'完成','23:58' union all
select 10,'未处理',''
go
select * from tb order by case when finisted='完成' then 0 else 1 end,finisttime,num
/*
num         finisted   finisttime
----------- ---------- ----------
5           完成         13:10
4           完成         14:11
35          完成         15:12
2           完成         20:09
6           完成         23:58
1           未处理        
10          未处理        
56          未处理        

(8 行受影响)
*/

------解决方案--------------------
SQL code

select * from tab
order by finisted,
(case when finisted='完成' then finisttime else cast(num as varchar) end)

------解决方案--------------------
SQL code
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T([num] int,[finisted] nvarchar(3),[finisttime] Datetime)
Insert #T
select 5,N'完成','13:10' union all
select 1,N'未处理',null union all
select 2,N'完成','20:09' union all
select 35,N'完成','15:12' union all
select 4,N'完成','14:11' union all
select 56,N'未处理',null union all
select 6,N'完成','23:58' union all
select 10,N'未处理',null
Go
Select * 
from #T
ORDER BY CASE WHEN [finisted]=N'完成' THEN 1 ELSE 2 END,[finisttime],[num]

/*
num    finisted    finisttime
5    完成    1900-01-01 13:10:00.000
4    完成    1900-01-01 14:11:00.000
35    完成    1900-01-01 15:12:00.000
2    完成    1900-01-01 20:09:00.000
6    完成    1900-01-01 23:58:00.000
1    未处理    NULL
10    未处理    NULL
56    未处理    NULL
*/