求一条查询语句!~

laowang134 2010-09-01 09:41:03
有一个表 市、县;现在我想把所有的县前面都加上市名称
例如

name no

九江市 01
市辖区 0101
彭泽县 0102

南昌市 02
市辖区 0201
南昌县 0202

萍乡市 03
市辖区 0301
平乡县 0302

--现在想得到
name no

九江市 01
九江市市辖区 0101
九江市彭泽县 0102

南昌市 02
南昌市市辖区 0201
南昌市南昌县 0202

萍乡市 03
萍乡市市辖区 0301
萍乡市平乡县 0302
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
laowang134 2010-09-01
  • 打赏
  • 举报
回复
后来的下次给分!~。。。
喜-喜 2010-09-01
  • 打赏
  • 举报
回复
use test
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
[name] varchar(20),
[no] varchar(5)
)
go
--插入测试数据
insert into tb select '九江市','01'
union all select '市辖区','0101'
union all select '彭泽县','0102'
union all select '南昌市','02'
union all select '市辖区','0201'
union all select '南昌县','0202'
union all select '萍乡市','03'
union all select '市辖区','0301'
union all select '平乡县','0302'
go
--代码实现

update a set [name]=isnull(b.[name]+a.[name],a.[name])
from tb a left join tb b
on left(a.[no],2)=b.[no] and a.[no]<>b.[no]

select * from tb
/*测试结果

name no
---------------------
九江市 01
九江市市辖区 0101
九江市彭泽县 0102
南昌市 02
南昌市市辖区 0201
南昌市南昌县 0202
萍乡市 03
萍乡市市辖区 0301
萍乡市平乡县 0302

(9行受影响)
*/
Mr_Nice 2010-09-01
  • 打赏
  • 举报
回复
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([name] varchar(15),[no] varchar(4))
insert [TB]
select '九江市','01' union all
select '市辖区','0101' union all
select '彭泽县','0102' union all
select '南昌市','02' union all
select '市辖区','0201' union all
select '南昌县','0202' union all
select '萍乡市','03' union all
select '市辖区','0301' union all
select '平乡县','0302'

select * from [TB]

UPDATE dbo.TB
SET TB.NAME = T.NAME
FROM (
SELECT (SELECT NAME FROM TB WHERE LEFT(A.no,2) = no)+NAME AS NAME,A.no FROM TB A
WHERE LEN(no)>2)T
WHERE TB.no = T.NO

/*name no
--------------- ----
九江市 01
九江市市辖区 0101
九江市彭泽县 0102
南昌市 02
南昌市市辖区 0201
南昌市南昌县 0202
萍乡市 03
萍乡市市辖区 0301
萍乡市平乡县 0302

(9 行受影响)
*/
hao1hao2hao3 2010-09-01
  • 打赏
  • 举报
回复

update t2 set [name] = isnull([name],'')+t1.[name]
from t1 left join t2
on left(t1.[no],2) = t2.[no]


laowang134 2010-09-01
  • 打赏
  • 举报
回复
修改的时候我是查出市name+县name 但是因为查出的市不是一个,搞不定;现在想的我头晕了 帮忙写下吧!~
华夏小卒 2010-09-01
  • 打赏
  • 举报
回复
--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (name varchar(16),no varchar(4))
insert into #tb
select '九江市','01' union all
select '市辖区','0101' union all
select '彭泽县','0102' union all
select '南昌市','02' union all
select '市辖区','0201' union all
select '南昌县','0202' union all
select '萍乡市','03' union all
select '市辖区','0301' union all
select '平乡县','0302'

update a set name =b.name+a.name
from #tb a,#tb b
where len(a.no)>2 and len(b.no)=2
and b.no=left(a.no,2)

select * from #tb
name no
---------------- ----
九江市 01
九江市市辖区 0101
九江市彭泽县 0102
南昌市 02
南昌市市辖区 0201
南昌市南昌县 0202
萍乡市 03
萍乡市市辖区 0301
萍乡市平乡县 0302

(9 行受影响)
hao1hao2hao3 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 laowang134 的回复:]
不好意思贴错了!~不是查询。。。是修改 我能查出来,不会修改!~
[/Quote]



修改也是可以用from语句和表连接的。
laowang134 2010-09-01
  • 打赏
  • 举报
回复
不好意思贴错了!~不是查询。。。是修改 我能查出来,不会修改!~
guguda2008 2010-09-01
  • 打赏
  • 举报
回复
SELECT ISNULL(T2.NAME,'')+T1.NAME AS NAME,T1.NO
FROM TB T1
LEFT JOIN TB T2 ON LEFT(T1.NO)=T2.NO
ORDER BY ISNULL(T2.NAME,'')+T1.NAME

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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