当前位置: 代码迷 >> Sql Server >> 對高手來說很簡單,對小弟我來說很復雜的問題,請教大家
  详细解决方案

對高手來說很簡單,對小弟我來說很復雜的問題,請教大家

热度:25   发布时间:2016-04-27 20:34:17.0
對高手來說很簡單,對我來說很復雜的問題,請教大家…
表1:
=====================
姓名           去過的地方
張三           a,b,h
李四           i,e,c,b
=====================

表2:
=====================
代號           地方名稱
a                 上海
b                 北京
c                 成都
d                 長沙
e                 深圳
i                 廣州
h                 香港
=====================

我要寫一條SQL語句,得出結果:
=================================
姓名           去過的地方
張三           上海,北京,香港
李四           廣州,深圳,成都,北京
=================================

多謝了!僅有的50分送給你!!!



------解决方案--------------------
jf
------解决方案--------------------
表1:
=====================
姓名 去過的地方
張三 a,b,h
李四 i,e,c,b
=====================

不符合范式哦
------解决方案--------------------
create table t1(n varchar(10),p nvarchar(30))
insert t1
select N '張三 ', 'a,b,h '
union select N '李四 ', 'i,e,c,b '


create table t2(code varchar(10),n1 nvarchar(30))
insert t2
select 'a ' , '上海 '
union select 'b ' , N '北京 '
union select 'c ' , N '成都 '
union select 'd ' , N '長沙 '
union select 'e ' , N '深圳 '
union select 'i ' , N '廣州 '
union select 'h ' , N '香港 '

select n,dbo.tf(p) from t1

create function tf(@id varchar(30))
returns varchar(1000)
as
begin
declare @str varchar(1000)

set @str= ' '
select @[email protected]+ ', '+n1 from t2 where charindex(code,@id)> 0
set @str=stuff(@str,1,1, ' ')
return @str
end

drop function tf
drop table t1,t2

------解决方案--------------------
create table t1(n varchar(10),p nvarchar(30))
insert t1
select N '張三 ', 'a,b,h '
union select N '李四 ', 'i,e,c,b '


create table t2(code varchar(10),n1 nvarchar(30))
insert t2
select 'a ' , '上海 '
union select 'b ' , N '北京 '
union select 'c ' , N '成都 '
union select 'd ' , N '長沙 '
union select 'e ' , N '深圳 '
union select 'i ' , N '廣州 '
union select 'h ' , N '香港 '


go

create function tf(@id varchar(30))
returns nvarchar(1000)
as
begin
declare @str varchar(1000)

set @str= ' '
select @[email protected]+ ', '+n1 from t2 where charindex(code,@id)> 0
set @str=stuff(@str,1,1, ' ')
return @str
end

go

select n,p=dbo.tf(p) from t1

drop function tf
drop table t1,t2

/*
  相关解决方案