举例数据L1 L2 L3 L4
A R 1 99
B R 5 100
V R 3 2
C R 2 88
D R 2 77
S R 2 NULL
D R 5 NULL
F R 2 NULL
A R 43 NULL
F R 34 NULL第一条件 当然是 按L4 最大的往下排 但是 所有NULL值的 要排在 100之前也就是先排 L4里的NULL值 再排 有数的 求教
A R 1 99
B R 5 100
V R 3 2
C R 2 88
D R 2 77
S R 2 NULL
D R 5 NULL
F R 2 NULL
A R 43 NULL
F R 34 NULL第一条件 当然是 按L4 最大的往下排 但是 所有NULL值的 要排在 100之前也就是先排 L4里的NULL值 再排 有数的 求教
from tb
order by case when L4 is null then 0 else 1 end,L4
from tb
order by case when L4 is null then 0 else 1 end,L4 DESC
修改的
/*
L1 L2 L3 L4
---- ---- ----------- -----------
S R 2 NULL
D R 5 NULL
F R 2 NULL
A R 43 NULL
F R 34 NULL
B R 5 100
A R 1 99
C R 2 88
D R 2 77
V R 3 2(10 行受影响)
*/也可以给个大数.
---------------------------------
-- Author: htl258(Tony)
-- Date : 2009-07-23 17:48:31
---------------------------------
--> 生成测试数据表:tbIf not object_id('[tb]') is null
Drop table [tb]
Go
Create table [tb]([L1] nvarchar(1),[L2] nvarchar(1),[L3] int,[L4] int)
Insert tb
Select 'A','R',1,99 union all
Select 'B','R',5,100 union all
Select 'V','R',3,2 union all
Select 'C','R',2,88 union all
Select 'D','R',2,77 union all
Select 'S','R',2,null union all
Select 'D','R',5,null union all
Select 'F','R',2,null union all
Select 'A','R',43,null union all
Select 'F','R',34,null
Go
--Select * from tb-->SQL查询如下:
select * from tb order by isnull(L4,(select max(l4)+1 from tb)) desc
/*
L1 L2 L3 L4
---- ---- ----------- -----------
S R 2 NULL
D R 5 NULL
F R 2 NULL
A R 43 NULL
F R 34 NULL
B R 5 100
A R 1 99
C R 2 88
D R 2 77
V R 3 2
(10 行受影响)*/