linux查询表字段排序,SQL Server 表中记录查询排序

--先创建一个表

create table ai(

id int not null,

no varchar(10) not null

)

go

--往表中插入数据

insert into ai

select 105,'2'

union all

select 105,'1'

union all

select 103,'1'

union all

select 105,'4'

go

--查询效果如下:

select * from ai

go

id          no

----------- ----------

105         2

105         1

103         1

105         4

i.

--要求的查询结果如下

--即要求no列的数据按'4','1','2'排列

id          no

----------- ----------

105         4

105         1

103         1

105         2

--解决方案1

--利用函数CHARINDEX

select * from ai

order by charindex(no,'4,1,2')

--解决方案2

--利用函数case

select * from ai

order by case when no='4' then 1

when no='1' then 2

when no='2' then 3

end

--解决方案3

--利用UNION 运算符

select * from ai

where no='4'

union all

select * from ai

where no='1'

union all

select * from ai

where no='2'

ii.

--查询要求指定no='4'排第一行,其他的行随机排序

id          no

----------- ----------

105         4

105         2

105         1

103         1

--解决方案

select * from ai

order by case when no='4' then 1

else 1+rand()

end

iii.

--查询要求所有行随机排序

--解决方案

select * from ai

order by newid()

iiii

--有一表ab有列i,其中数据如下:

i varchar(10)

a1

a10

a101

a5

p4

p41

p5

--现在要求列i中数据先按字母排序,再按数字排序

--效果如下:

a1

a5

a10

a101

p4

p5

p41

--解决方案

select * from ab

order by left(i,1),convert(int,substring(i,2,8000))

===============================================

表a中,level字段是varchar类型,如何获取最大值2.1.11  ?

IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB

GO

CREATE TABLE TB(COL1 VARCHAR(50))

INSERT INTO TB

SELECT '2.1.6' UNION ALL

SELECT '2.1.1' UNION ALL

SELECT '2.1.2' UNION ALL

SELECT '2.1.3' UNION ALL

SELECT '2.1.7' UNION ALL

SELECT '2.1.5' UNION ALL

SELECT '2.1.10' UNION ALL

SELECT '2.1.11' UNION ALL

SELECT '2.1.8' UNION ALL

SELECT '2.1.9' UNION ALL

SELECT '2.1.4'

SELECT * FROM TB

ORDER BY cast(PARSENAME(COL1,3) as int),cast(PARSENAME(COL1,2) as int),cast(PARSENAME(COL1,1) as int)

/*

2.1.1

2.1.2

2.1.3

2.1.4

2.1.5

2.1.6

2.1.7

2.1.8

2.1.9

2.1.10

2.1.11

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值