34,594
社区成员
发帖
与我相关
我的任务
分享
create table #tablea
(
a datetime null,
b datetime null,
c datetime null
)
insert into #tablea(a,b,c) values('2008-08-08','2008-08-09','2008-08-10')
insert into #tablea(a,b,c) values('2008-08-08','2008-08-09','2008-08-09')
insert into #tablea(a,b,c) values('2008-08-08','2008-08-09',null)
insert into #tablea(a,b,c) values('2008-08-08','2008-08-08','2008-08-10')
insert into #tablea(a,b,c) values('2008-08-08','2008-08-08','2008-08-09')
insert into #tablea(a,b,c) values('2008-08-08','2008-08-08',null)
insert into #tablea(a,b,c) values('2008-08-08',null,null)
------------------------------------------------------------------------------------
insert into #tablea(a,b,c) values('2008-08-07','2008-08-09','2008-08-10')
insert into #tablea(a,b,c) values('2008-08-07','2008-08-09','2008-08-09')
insert into #tablea(a,b,c) values('2008-08-07','2008-08-09',null)
insert into #tablea(a,b,c) values('2008-08-07','2008-08-08','2008-08-10')
insert into #tablea(a,b,c) values('2008-08-07','2008-08-08','2008-08-09')
insert into #tablea(a,b,c) values('2008-08-07','2008-08-08',null)
insert into #tablea(a,b,c) values('2008-08-07',null,null)
-----------------------------------------------------------------------------------
insert into #tablea(a,b,c) values(null,null,null)
SELECT
*
FROM #tablea
ORDER BY
CASE WHEN a IS NULL THEN 0 ELSE 1 END +
CASE WHEN b IS NULL THEN 0 ELSE 1 END +
CASE WHEN c IS NULL THEN 0 ELSE 1 END,
a, b, c
/*
a b c
------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------
NULL NULL NULL
2008-08-07 00:00:00.000 NULL NULL
2008-08-08 00:00:00.000 NULL NULL
2008-08-07 00:00:00.000 2008-08-08 00:00:00.000 NULL
2008-08-07 00:00:00.000 2008-08-09 00:00:00.000 NULL
2008-08-08 00:00:00.000 2008-08-08 00:00:00.000 NULL
2008-08-08 00:00:00.000 2008-08-09 00:00:00.000 NULL
2008-08-07 00:00:00.000 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000
2008-08-07 00:00:00.000 2008-08-08 00:00:00.000 2008-08-10 00:00:00.000
2008-08-07 00:00:00.000 2008-08-09 00:00:00.000 2008-08-09 00:00:00.000
2008-08-07 00:00:00.000 2008-08-09 00:00:00.000 2008-08-10 00:00:00.000
2008-08-08 00:00:00.000 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000
2008-08-08 00:00:00.000 2008-08-08 00:00:00.000 2008-08-10 00:00:00.000
2008-08-08 00:00:00.000 2008-08-09 00:00:00.000 2008-08-09 00:00:00.000
2008-08-08 00:00:00.000 2008-08-09 00:00:00.000 2008-08-10 00:00:00.000
(15 row(s) affected)
*/
SELECT
CASE WHEN a IS NULL THEN 0 ELSE 1 END +
CASE WHEN b IS NULL THEN 0 ELSE 1 END +
CASE WHEN c IS NULL THEN 0 ELSE 1 END,
a, b, c
FROM #tablea
ORDER BY
CASE WHEN a IS NULL THEN 0 ELSE 1 END +
CASE WHEN b IS NULL THEN 0 ELSE 1 END +
CASE WHEN c IS NULL THEN 0 ELSE 1 END,
a, b, c
=-----------------
a b c
----------- ----------------------- ----------------------- -----------------------
0 NULL NULL NULL
1 2008-08-07 00:00:00.000 NULL NULL
1 2008-08-08 00:00:00.000 NULL NULL
2 2008-08-07 00:00:00.000 2008-08-08 00:00:00.000 NULL
2 2008-08-07 00:00:00.000 2008-08-09 00:00:00.000 NULL
2 2008-08-08 00:00:00.000 2008-08-08 00:00:00.000 NULL
2 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000 NULL
3 2008-08-07 00:00:00.000 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000
3 2008-08-07 00:00:00.000 2008-08-08 00:00:00.000 2008-08-10 00:00:00.000
3 2008-08-07 00:00:00.000 2008-08-09 00:00:00.000 2008-08-09 00:00:00.000
3 2008-08-07 00:00:00.000 2008-08-09 00:00:00.000 2008-08-10 00:00:00.000
3 2008-08-08 00:00:00.000 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000
3 2008-08-08 00:00:00.000 2008-08-08 00:00:00.000 2008-08-10 00:00:00.000
3 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000 2008-08-09 00:00:00.000
3 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000 2008-08-10 00:00:00.000
(15 行受影响)