原始table:
所属路线          路段编号 起点桩号 迄点桩号
C084420222 001 0 5.251
C084420222 002 5.251 7.085
C084420222 003 7.085 9.322C085420222 001 0 1.394C086420222 001 0 1.143
C086420222 002 1.143 1.243C087420222 001 0 1.06
C087420222 002 1.06 1.593
C087420222 003 1.593 2.01
C087420222 004 2.01 2.555如何实现将任意一条路线的路段编号翻转过来其他字段的值不变效果如下:所属路线          路段编号 起点桩号 迄点桩号
C084420222 001 0 5.251
C084420222 002 5.251 7.085
C084420222 003 7.085 9.322C085420222 001 0 1.394C086420222 001 0 1.143
C086420222 002 1.143 1.243C087420222 004 0 1.06
C087420222 003 1.06 1.593
C087420222 002 1.593 2.01
C087420222 001 2.01 2.555

解决方案 »

  1.   

    REVERSE
    返回字符表达式的反转。
    ----楼主的数据看不出发生了什么改变。。
      

  2.   

    不好意思出错了!原始table:
    所属路线          路段编号 起点桩号 迄点桩号
    C084420222 001 0 5.251
    C084420222 002 5.251 7.085
    C084420222 003 7.085 9.322C085420222 001 0 1.394C086420222 001 0 1.143
    C086420222 002 1.143 1.243C087420222 001 0 1.06
    C087420222 002 1.06 1.593
    C087420222 003 1.593 2.01
    C087420222 004 2.01 2.555如何实现将任意一条路线的路段编号翻转过来其他字段的值不变效果如下:所属路线          路段编号 起点桩号 迄点桩号
    C084420222 001 0 5.251
    C084420222 002 5.251 7.085
    C084420222 003 7.085 9.322C085420222 001 0 1.394C086420222 001 0 1.143
    C086420222 002 1.143 1.243C087420222 004 0 1.06
    C087420222 003 1.06 1.593
    C087420222 002 1.593 2.01
    C087420222 001 2.01 2.555
      

  3.   


    --如果路段编号满足以下两个条件:(1)固定为3位;(2)编号从001连续编号
    --可以使用如下SQL完成create table tb ( 所属路线 varchar (100) null , 路段编号 varchar (100) null , 起点桩号 varchar (100) null , 迄点桩号 varchar (100) null )
    go
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c084420222' , '001' , '0' , '5.251' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c084420222' , '002' , '5.251' , '7.085' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c084420222' , '003' , '7.085' , '9.322' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c085420222' , '001' , '0' , '1.394' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c086420222' , '001' , '0' , '1.143' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c086420222' , '002' , '1.143' , '1.243' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c087420222' , '001' , '0' , '1.06' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c087420222' , '002' , '1.06' , '1.593' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c087420222' , '003' , '1.593' , '2.01' )
    insert tb ( 所属路线 , 路段编号 , 起点桩号 , 迄点桩号 ) values ( 'c087420222' , '004' , '2.01' , '2.555' )
    select * from tbdeclare @所属路线 varchar(100),@maxVarchar varchar(100),@maxInt int
    set @所属路线='c087420222'set @maxVarchar=(select max(路段编号) from tb where 所属路线=@所属路线)
    set @maxInt=cast(@maxVarchar as int)+1
    --select @maxintupdate tb set 路段编号=right('000' + cast(@maxInt-cast(路段编号 as int) as varchar(10)),3) where 所属路线=@所属路线select * from tbdrop table tb
      

  4.   


    --建立測試環境
    Create Table Test(
    所属路线 Varchar(10),
    路段编号 Varchar(3), 
    起点桩号 Numeric(10,3),
    迄点桩号 Numeric(10,3))
    --插入數據
    Insert Test Select
    'C084420222', '001', 0, 5.251
    Union All Select
    'C084420222', '002', 5.251, 7.085
    Union All Select
    'C084420222', '003', 7.085, 9.322
    Union All Select
    'C085420222', '001', 0, 1.394
    Union All Select
    'C086420222', '001', 0, 1.143
    Union All Select
    'C086420222', '002', 1.143, 1.243
    Union All Select
    'C087420222', '001', 0, 1.06
    Union All Select
    'C087420222', '002', 1.06, 1.593
    Union All Select
    'C087420222', '003', 1.593, 2.01
    Union All Select
    'C087420222', '004', 2.01, 2.555
    GO
    --建立存儲過程
    Create ProceDure ReverseLine
    (@Line Varchar(10))
    As
    Begin
    Update Test Set  路段编号=Right('0000'+Rtrim((Select Max(路段编号)+1 from Test Where  所属路线=@Line)-路段编号),3) Where  所属路线=@Line
    End
    GO
    --測試
    Select * from Test
    EXEC ReverseLine 'C087420222'
    --EXEC ReverseLine 'C084420222'
    Select * from Test
    --刪除測試環境
    Drop Table Test
    Drop ProceDure ReverseLine
    --結果
    /*
    所属路线 路段编号 起点桩号 迄点桩号
    C084420222 001 .000 5.251
    C084420222 002 5.251 7.085
    C084420222 003 7.085 9.322
    C085420222 001 .000 1.394
    C086420222 001 .000 1.143
    C086420222 002 1.143 1.243
    C087420222 001 .000 1.060
    C087420222 002 1.060 1.593
    C087420222 003 1.593 2.010
    C087420222 004 2.010 2.555C084420222 001 .000 5.251
    C084420222 002 5.251 7.085
    C084420222 003 7.085 9.322
    C085420222 001 .000 1.394
    C086420222 001 .000 1.143
    C086420222 002 1.143 1.243
    C087420222 004 .000 1.060
    C087420222 003 1.060 1.593
    C087420222 002 1.593 2.010
    C087420222 001 2.010 2.555*/