请教按字段奇偶性排序的SQL语句

socrates 2011-07-25 11:41:17
数据库中有个整形字段,现在想对其按奇偶相间的方式进行排序,想请教一下有没有不通过创建临时表,而通过一个SQL语句实现的方法。谢谢。
举例:

排序前:
i_port
2
0
1001
200
101
34

排序后:
i_port
0
101
2
1001
34
200
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DataBox-MDX 2011-07-26
  • 打赏
  • 举报
回复


USE master;
GO
SET NOCOUNT ON
IF OBJECT_ID(N'A',N'U')IS NOT NULL DROP TABLE A
GO

CREATE TABLE A--创建测试数据表
(
id int
)
INSERT INTO A--插入测试数据
SELECT 2 UNION ALL
SELECT 0 UNION ALL
SELECT 1001 UNION ALL
SELECT 200 UNION ALL
SELECT 101 UNION ALL
SELECT 34
go

WITH cte AS
(
select TOP 100 PERCENT id,
CASE WHEN id%2=0 THEN ROW_NUMBER()OVER(PARTITION BY CASE WHEN id%2=0 THEN 1 END ORDER BY id)*2-1
ELSE ROW_NUMBER()OVER(PARTITION BY CASE WHEN id%2<>0 THEN 1 END ORDER BY id)*2
END AS ou from A
)
SELECT id FROM cte ORDER BY ou


go
IF OBJECT_ID(N'A',N'U')IS NOT NULL DROP TABLE A
GO

/*
id
-----------
0
101
2
1001
34
200

*/
cd731107 2011-07-26
  • 打赏
  • 举报
回复
create table tb(i_port int)
insert tb select 2
insert tb select 0
insert tb select 1001
insert tb select 200
insert tb select 101
insert tb select 34

select i_port from
(select *,id=row_number() over (partition by i_port%2
order by i_port) from tb) a
order by id,i_port

/*
i_port
-----------
0
101
2
1001
34
200

(6 行受影响)
*/

GavinXu1980 2011-07-26
  • 打赏
  • 举报
回复
有什么实际意义吗
socrates 2011-07-26
  • 打赏
  • 举报
回复
怎么没人回答啊?

22,199

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧