序号 名称 费用 信息
20012312 4545445 10 府前街10号
20012312 yysdf 20 府前街10号
20012333 4525423 600 国良路30号
20012324 5264125 501 南京路
20012324 dd52241 500 胜利路dsaf
20015241 2323223 100 南开大学
据上表可以看出同一个序号里可能会包括多个名称(至少两个或更多未全部列出),但也有一个序号里一个名称的,我想做的就是把序号一样的列的名称统一起来,比如第一二行,我想让一行的数字来替换二行的字母,只要是一样的序号我就让她自动选取和他一样的序号的数字名称来替换非数字名称,我该怎么写这条语句呢?谢谢各位,在线等!
8 个解决方案
#1
select 序号,名称,费用,信息
from tablename
where 序号+名称 in
(
select 序号+max(名称) from tablename
group by 序号
)
from tablename
where 序号+名称 in
(
select 序号+max(名称) from tablename
group by 序号
)
#2
仁兄谢谢你的热情,我试过了,你的语句不能实现我的操作,我想要的结果是这样的,
序号 名称 费用 信息
20012312 4545445 10 府前街10号
20012312 4545445 20 府前街10号
20012333 4525423 600 国良路30号
20012324 5264125 501 南京路
20012324 5264125 500 胜利路dsaf
20015241 2323223 100 南开大学
还请大家继续想法帮帮我!
序号 名称 费用 信息
20012312 4545445 10 府前街10号
20012312 4545445 20 府前街10号
20012333 4525423 600 国良路30号
20012324 5264125 501 南京路
20012324 5264125 500 胜利路dsaf
20015241 2323223 100 南开大学
还请大家继续想法帮帮我!
#3
自已顶一下
#4
--创建测试环境
create table #
(
[序号] varchar(20),
[名称] varchar(20),
[费用] money,
[信息] varchar(200)
)
insert #
select '20012312','4545445',10,'府前街10号' union
select '20012312','yysdf',20,'府前街10号' union
select '20012333','4525423',600,'国良路30号' union
select '20012324','5264125',501,'南京路' union
select '20012324','dd52241',500,'胜利路dsaf' union
select '20015241','2323223',100,'南开大学'
--测试
update # set [名称]=A.[名称]
from # B
join (select [序号],[名称] from # where patindex('%[a-z]%',[名称])=0)A
on A.[序号]=B.[序号]
-- 查看
select * from #
--删除测试环境
drop table #
--结果
/*
序号 名称 费用 信息
-------------------- -------------------- --------------------- ------------
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
*/
create table #
(
[序号] varchar(20),
[名称] varchar(20),
[费用] money,
[信息] varchar(200)
)
insert #
select '20012312','4545445',10,'府前街10号' union
select '20012312','yysdf',20,'府前街10号' union
select '20012333','4525423',600,'国良路30号' union
select '20012324','5264125',501,'南京路' union
select '20012324','dd52241',500,'胜利路dsaf' union
select '20015241','2323223',100,'南开大学'
--测试
update # set [名称]=A.[名称]
from # B
join (select [序号],[名称] from # where patindex('%[a-z]%',[名称])=0)A
on A.[序号]=B.[序号]
-- 查看
select * from #
--删除测试环境
drop table #
--结果
/*
序号 名称 费用 信息
-------------------- -------------------- --------------------- ------------
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
*/
#5
你测试一下,我没有数据测试:
select 序号,
case when t1.名称>t2.名称 then t2.名称 else t1.名称 end as 名称,费用,信息
from tablename t1 left join tablename t2 on t1.序号=t2.序号 and t1.名称=t2.名称
where t1.名称<>t2.名称
select 序号,
case when t1.名称>t2.名称 then t2.名称 else t1.名称 end as 名称,费用,信息
from tablename t1 left join tablename t2 on t1.序号=t2.序号 and t1.名称=t2.名称
where t1.名称<>t2.名称
#6
--创建测试数据
create table bb ([id] varchar(50),[name] varchar(50),past int,info varchar(50))
insert bb select '20012312','4545445',10,'府前街10号'
union all select '20012312','yyasdf',20,'府前街10号'
union all select '20012333','4525423',600,'国良路30号'
union all select '20012324','5264125',501,'南京路'
union all select '20012324','dd52241',500,'胜利路dsaf'
union all select '20015241','2323223',100,'南开大学'
--测试
update bb set name=(select top 1 name from bb aa where aa.id=bb.id )
--删除测试数据
drop table bb
create table bb ([id] varchar(50),[name] varchar(50),past int,info varchar(50))
insert bb select '20012312','4545445',10,'府前街10号'
union all select '20012312','yyasdf',20,'府前街10号'
union all select '20012333','4525423',600,'国良路30号'
union all select '20012324','5264125',501,'南京路'
union all select '20012324','dd52241',500,'胜利路dsaf'
union all select '20015241','2323223',100,'南开大学'
--测试
update bb set name=(select top 1 name from bb aa where aa.id=bb.id )
--删除测试数据
drop table bb
#7
拉倒抛砖引玉:
select a.序号,a.名称,b.费用,b.信息 from tablename a left join tablename b on a.序号=b.序号 where a.名称<=(select min(名称) from tablename where 序号=a.序号)
结果如下
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
select a.序号,a.名称,b.费用,b.信息 from tablename a left join tablename b on a.序号=b.序号 where a.名称<=(select min(名称) from tablename where 序号=a.序号)
结果如下
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
#8
应该满足了cncfish (独行天下) 的要求!
#1
select 序号,名称,费用,信息
from tablename
where 序号+名称 in
(
select 序号+max(名称) from tablename
group by 序号
)
from tablename
where 序号+名称 in
(
select 序号+max(名称) from tablename
group by 序号
)
#2
仁兄谢谢你的热情,我试过了,你的语句不能实现我的操作,我想要的结果是这样的,
序号 名称 费用 信息
20012312 4545445 10 府前街10号
20012312 4545445 20 府前街10号
20012333 4525423 600 国良路30号
20012324 5264125 501 南京路
20012324 5264125 500 胜利路dsaf
20015241 2323223 100 南开大学
还请大家继续想法帮帮我!
序号 名称 费用 信息
20012312 4545445 10 府前街10号
20012312 4545445 20 府前街10号
20012333 4525423 600 国良路30号
20012324 5264125 501 南京路
20012324 5264125 500 胜利路dsaf
20015241 2323223 100 南开大学
还请大家继续想法帮帮我!
#3
自已顶一下
#4
--创建测试环境
create table #
(
[序号] varchar(20),
[名称] varchar(20),
[费用] money,
[信息] varchar(200)
)
insert #
select '20012312','4545445',10,'府前街10号' union
select '20012312','yysdf',20,'府前街10号' union
select '20012333','4525423',600,'国良路30号' union
select '20012324','5264125',501,'南京路' union
select '20012324','dd52241',500,'胜利路dsaf' union
select '20015241','2323223',100,'南开大学'
--测试
update # set [名称]=A.[名称]
from # B
join (select [序号],[名称] from # where patindex('%[a-z]%',[名称])=0)A
on A.[序号]=B.[序号]
-- 查看
select * from #
--删除测试环境
drop table #
--结果
/*
序号 名称 费用 信息
-------------------- -------------------- --------------------- ------------
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
*/
create table #
(
[序号] varchar(20),
[名称] varchar(20),
[费用] money,
[信息] varchar(200)
)
insert #
select '20012312','4545445',10,'府前街10号' union
select '20012312','yysdf',20,'府前街10号' union
select '20012333','4525423',600,'国良路30号' union
select '20012324','5264125',501,'南京路' union
select '20012324','dd52241',500,'胜利路dsaf' union
select '20015241','2323223',100,'南开大学'
--测试
update # set [名称]=A.[名称]
from # B
join (select [序号],[名称] from # where patindex('%[a-z]%',[名称])=0)A
on A.[序号]=B.[序号]
-- 查看
select * from #
--删除测试环境
drop table #
--结果
/*
序号 名称 费用 信息
-------------------- -------------------- --------------------- ------------
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
*/
#5
你测试一下,我没有数据测试:
select 序号,
case when t1.名称>t2.名称 then t2.名称 else t1.名称 end as 名称,费用,信息
from tablename t1 left join tablename t2 on t1.序号=t2.序号 and t1.名称=t2.名称
where t1.名称<>t2.名称
select 序号,
case when t1.名称>t2.名称 then t2.名称 else t1.名称 end as 名称,费用,信息
from tablename t1 left join tablename t2 on t1.序号=t2.序号 and t1.名称=t2.名称
where t1.名称<>t2.名称
#6
--创建测试数据
create table bb ([id] varchar(50),[name] varchar(50),past int,info varchar(50))
insert bb select '20012312','4545445',10,'府前街10号'
union all select '20012312','yyasdf',20,'府前街10号'
union all select '20012333','4525423',600,'国良路30号'
union all select '20012324','5264125',501,'南京路'
union all select '20012324','dd52241',500,'胜利路dsaf'
union all select '20015241','2323223',100,'南开大学'
--测试
update bb set name=(select top 1 name from bb aa where aa.id=bb.id )
--删除测试数据
drop table bb
create table bb ([id] varchar(50),[name] varchar(50),past int,info varchar(50))
insert bb select '20012312','4545445',10,'府前街10号'
union all select '20012312','yyasdf',20,'府前街10号'
union all select '20012333','4525423',600,'国良路30号'
union all select '20012324','5264125',501,'南京路'
union all select '20012324','dd52241',500,'胜利路dsaf'
union all select '20015241','2323223',100,'南开大学'
--测试
update bb set name=(select top 1 name from bb aa where aa.id=bb.id )
--删除测试数据
drop table bb
#7
拉倒抛砖引玉:
select a.序号,a.名称,b.费用,b.信息 from tablename a left join tablename b on a.序号=b.序号 where a.名称<=(select min(名称) from tablename where 序号=a.序号)
结果如下
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
select a.序号,a.名称,b.费用,b.信息 from tablename a left join tablename b on a.序号=b.序号 where a.名称<=(select min(名称) from tablename where 序号=a.序号)
结果如下
20012312 4545445 10.0000 府前街10号
20012312 4545445 20.0000 府前街10号
20012324 5264125 501.0000 南京路
20012324 5264125 500.0000 胜利路dsaf
20012333 4525423 600.0000 国良路30号
20015241 2323223 100.0000 南开大学
#8
应该满足了cncfish (独行天下) 的要求!