菜鸟 请教各位高手一个问题!如何将表中的一个字段的值翻转其他值不变

youyudejitashou 2006-04-08 09:23:39
原始table:
所属路线 路段编号 起点桩号 迄点桩号
C084420222 001 0 5.251
C084420222 002 5.251 7.085
C084420222 003 7.085 9.322

C085420222 001 0 1.394

C086420222 001 0 1.143
C086420222 002 1.143 1.243

C087420222 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.322

C085420222 001 0 1.394

C086420222 001 0 1.143
C086420222 002 1.143 1.243

C087420222 004 0 1.06
C087420222 003 1.06 1.593
C087420222 002 1.593 2.01
C087420222 001 2.01 2.555
...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
paoluo 2006-04-08
  • 打赏
  • 举报
回复

--建立測試環境
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.555

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 004 .000 1.060
C087420222 003 1.060 1.593
C087420222 002 1.593 2.010
C087420222 001 2.010 2.555

*/
OracleRoob 2006-04-08
  • 打赏
  • 举报
回复

--如果路段编号满足以下两个条件:(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 tb

declare @所属路线 varchar(100),@maxVarchar varchar(100),@maxInt int
set @所属路线='c087420222'

set @maxVarchar=(select max(路段编号) from tb where 所属路线=@所属路线)
set @maxInt=cast(@maxVarchar as int)+1
--select @maxint

update tb set 路段编号=right('000' + cast(@maxInt-cast(路段编号 as int) as varchar(10)),3) where 所属路线=@所属路线

select * from tb

drop table tb

22,210

社区成员

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

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