我做系统的时候,有一个表,假设为test,里面有两个字段,因为数据格式特殊不知道怎样排序,请大侠指点。
字段 MemberScore             HasConvert
      00|00|00                0
      02|12|24                25
      04|20|88                33  
说明:MemberScore里的格式的意思是会员的积分由3个固定的部分组成:字段里的数据是各个部分的分数用|隔开组合存储在字段里,HasConvert是已经兑换的分数,现在要求写个SQL将会员按照分数从高到低排列输出,不知道怎样写,请指点一二,谢谢!

解决方案 »

  1.   

    这样????
    Select * From test Order By Cast(Replace(MemberScore,'|','') As Int)-HasConvert
      

  2.   

    会员分数是这样计算的:会员现在有的分数= 已经取得的-已经兑换的
    已经取得的这样计算:假设MemberScore 里的记录是这样的04|20|88 ,则总分为4+20+88=112分,兑换33分,最后分为4+20+88-33 = 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(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 行)
    */
      

  4.   

    --上为定位的取法.下为不定位的取法.--创建测试数据
    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 行)
    */
      

  5.   

    刚才又仔细看了下,发现数据库中还存在着这样的数据:MemberScore:0|20|30,不是我刚才给的样式,这样该怎么改下呢?用潇洒老乌龟的就不行了