我做系统的时候,有一个表,假设为test,里面有两个字段,因为数据格式特殊不知道怎样排序,请大侠指点。
字段 MemberScore HasConvert
00|00|00 0
02|12|24 25
04|20|88 33
说明:MemberScore里的格式的意思是会员的积分由3个固定的部分组成:字段里的数据是各个部分的分数用|隔开组合存储在字段里,HasConvert是已经兑换的分数,现在要求写个SQL将会员按照分数从高到低排列输出,不知道怎样写,请指点一二,谢谢!
字段 MemberScore HasConvert
00|00|00 0
02|12|24 25
04|20|88 33
说明:MemberScore里的格式的意思是会员的积分由3个固定的部分组成:字段里的数据是各个部分的分数用|隔开组合存储在字段里,HasConvert是已经兑换的分数,现在要求写个SQL将会员按照分数从高到低排列输出,不知道怎样写,请指点一二,谢谢!
Select * From test Order By Cast(Replace(MemberScore,'|','') As Int)-HasConvert
已经取得的这样计算:假设MemberScore 里的记录是这样的04|20|88 ,则总分为4+20+88=112分,兑换33分,最后分为4+20+88-33 = 79 分。
create table tb(MemberScore varchar(10),HasConvert int)
insert into tb values('00|00|00',0)
insert into tb values('02|12|24',25)
insert into tb values('04|20|88',33)
select cast(substring(MemberScore,1,2) as int) +
cast(substring(MemberScore,4,2) as int) +
cast(substring(MemberScore,7,2) as int) -
HasConvert as 目前分数
from tb
order by 目前分数
drop table tb
--结果
/*
目前分数
-----------
0
13
79
(所影响的行数为 3 行)
*/
create table tb(MemberScore varchar(10),HasConvert int)
insert into tb values('00|00|00',0)
insert into tb values('02|12|24',25)
insert into tb values('04|20|88',33)
select cast(left(MemberScore,charindex('|',MemberScore)-1) as int)+
cast(substring(MemberScore,charindex('|',MemberScore)+1 , charindex('|',MemberScore,charindex('|',MemberScore)+1) - charindex('|',MemberScore) - 1) as int)+
cast(reverse(left(reverse(MemberScore),charindex('|',reverse(MemberScore)) -1)) as int) -
HasConvert as 目前分数
from tb
order by 目前分数
drop table tb
--结果
/*
目前分数
-----------
0
13
79
(所影响的行数为 3 行)
*/