表Region(ID,Name,Code)(主键,名称,助记码)
记录:
ID Name Code001 上海 SH --省级
002 山东 SD --省级
002001 济南 JN --市级
002002 青岛 QD
003 江苏 JS
003001 徐州 XZ要求:将市级的助记码,改成其上级就是省级的助记码。比如将济南和青岛的助记码改成山东SD.
一条sql语句,该如何写?
记录:
ID Name Code001 上海 SH --省级
002 山东 SD --省级
002001 济南 JN --市级
002002 青岛 QD
003 江苏 JS
003001 徐州 XZ要求:将市级的助记码,改成其上级就是省级的助记码。比如将济南和青岛的助记码改成山东SD.
一条sql语句,该如何写?
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-11-11 19:39:55
-------------------------------------
--> 生成测试数据: @tb
DECLARE @tb TABLE (ID varchar(6),Name varchar(4),Code varchar(2))
INSERT INTO @tb
SELECT '001','上海','SH' UNION ALL
SELECT '002','山东','SD' UNION ALL
SELECT '002001','济南','JN' UNION ALL
SELECT '002002','青岛','QD' UNION ALL
SELECT '003','江苏','JS' UNION ALL
SELECT '003001','徐州','XZ'--SQL查询如下:UPDATE B SET
Code = A.Code
FROM @tb AS A
JOIN @tb AS B
ON LEN(B.ID) = 6 AND B.ID LIKE A.ID + '_%';SELECT * FROM @tb;
'001', '上海', 'SH' union all select
'002', '山东', 'SD' union all select
'002001', '济南', 'JN' union all select
'002002', '青岛', 'QD' union all select
'003', '江苏', 'JS'union all select
'003001', '徐州', 'XZ' update R2 set R2.Code=R1.Code
from Region R1,Region R2
where Substring(R2.ID,1,Len(R1.ID))=R1.ID and R1.ID<>R2.ID
select * from Region
/*ID Name Code
---------- ---------- ----------
001 上海 SH
002 山东 SD
002001 济南 SD
002002 青岛 SD
003 江苏 JS
003001 徐州 JS(6 行受影响)*/
drop table Region
create table Region(ID nvarchar(10),[Name] nvarchar(10),Code nvarchar(10))
insert into Region select
'001', '上海', 'SH' union all select
'002', '山东', 'SD' union all select
'002001', '济南', 'JN' union all select
'002002', '青岛', 'QD' union all select
'003', '江苏', 'JS'union all select
'003001', '徐州', 'XZ' update R2 set R2.Code=R1.Code
from Region R1
join Region R2 on Substring(R2.ID,1,Len(R1.ID))=R1.ID and R1.ID<>R2.IDselect * from Region
/*ID Name Code
---------- ---------- ----------
001 上海 SH
002 山东 SD
002001 济南 SD
002002 青岛 SD
003 江苏 JS
003001 徐州 JS(6 行受影响)*/
drop table Region