34,590
社区成员
发帖
与我相关
我的任务
分享
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( ORDER BY GETDATE() ) num
FROM #T
)
SELECT Name ,
ExtenField1
FROM cte
ORDER BY CASE WHEN ExtenField1 IS NULL THEN 1
ELSE 0
END ,
num
我能说我5:00就下班了么。。。--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Name] nvarchar(23),[ExtenField1] int)
Insert #T
select N'测试1',0 union all
select N'测试2',1 union all
select N'测试3',null union all
select N'测试4',4 union all
select N'测试5',null union all
select N'测试6',3
Go
--测试数据结束
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( ORDER BY GETDATE() ) num
FROM #T
)
SELECT Name ,
ExtenField1
FROM cte
ORDER BY CASE WHEN ExtenField1 IS NULL THEN 0
ELSE 1
END ,
num
DECLARE @t TABLE ( id INT, c1 NVARCHAR(20))
INSERT INTO @t VALUES (1,'a')
INSERT INTO @t VALUES (2,NULL)
INSERT INTO @t VALUES (3,'b')
INSERT INTO @t VALUES (4,'c')
--如果你的数据没什么规律,不好象楼上各位那样排序(假设NULL的值),
--可以两次排序,先让 c1 为 null 时就排到末尾再说,这样可保证万无一失
SELECT * FROM @t
ORDER BY
CASE WHEN c1 IS NULL THEN 1 ELSE 0 END
,c1
/*
id c1
1 a
3 b
4 c
2 NULL
*/
declare @t table(id int identity,num varchar(max))
insert into @t(num) values(null),('1'),('22'),('12'),(''),('0'),('211')
select * from @t order by (case when isnull(num,'')='' then 1 else 0 end),(case when isnull(num,'')='' then 0 else convert(int,num) end)
declare @t table(id int identity,num varchar(max))
insert into @t(num) values(null),('1'),('22'),('12'),(''),('0')
select * from @t order by (case when isnull(num,'')='' then 1 else 0 end),num
WITH cte AS (
SELECT '0' AS t UNION ALL
SELECT '1' UNION ALL
SELECT '' UNION ALL
SELECT '2'
)
SELECT * FROM cte
ORDER BY (CASE t WHEN '' THEN '9999' END)
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Name] nvarchar(23),[ExtenField1] int)
Insert #T
select N'测试1',0 union all
select N'测试2',1 union all
select N'测试3',null union all
select N'测试4',2 union all
select N'测试5',null union all
select N'测试6',3
Go
--测试数据结束
SELECT *
FROM #T
ORDER BY CASE WHEN ExtenField1 IS NULL THEN 10000000
ELSE ExtenField1
END