對高手來說很簡單,對我來說很復雜的問題,請教大家…
表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 @str=@str+ ', '+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 @str=@str+ ', '+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
/*
n p
----- --------
李四 北京,成都,深?,廣州
張三 上海,北京,香港
*/
[解决办法]
declare @tousers char(50)
create table table1 (ItemID char(1),ToUsers char(100))
create table table2 (myitemid char(1),MyToUsers char(20))
CREATE TABLE TABLE3(MYTOUSERS CHAR(20),MYNAME CHAR(10))
insert into table1 select '2 ', 'A,B,H ' union select '3 ', 'I,E,C,B '
INSERT INTO TABLE3 SELECT 'A ', '上海 ' UNION SELECT 'B ', '北京 '
UNION SELECT 'C ', '成都 ' UNION SELECT 'D ', '長沙 '
UNION SELECT 'E ', '深圳 ' UNION SELECT 'I ', '廣州 '
UNION SELECT 'H ', '香港 '
declare @sql varchar(8000)
set @sql= ' '
select @sql=@SQL+ 'select '+cast(ItemID as varchar)+ ', ' ' '+replace(ToUsers, ', ', ' ' ' union all select '+cast(ItemID as varchar)+ ', ' ' ')+ ' ' ' union all '
from table1
select @ToUsers=tousers from table1
--select 'select '+ '2, ' ' '+replace( 'zhangsan,lisi,wangwu ', ', ', ' ' ' union all select '+ '2, ' ' ')+ ' ' ' '
--select @sql
set @sql=left(@sql,len(@sql)-10)
exec( 'insert table2 '+@sql)
select * from table2
SELECT myitemid,myname into b from table2 a left join table3 b on a.mytousers=b.mytousers
GO
Create Function F_GetRole(@ID char(1))
Returns Nvarchar(2000)
As
Begin
Declare @S Nvarchar(2000)
Select @S = ' '
Select @S = @S + ', ' + RTRIM(myname) From B Where MYITEMID = @ID
Select @S = Stuff(@S, 1, 1, ' ')
Return @S
End
GO
Select
myitemid,
dbo.F_GetRole(myitemid) As Role
From
b GROUP BY MYITEMID
GO
drop table table1
drop table table2
DROP TABLE TABLE3
Drop Function F_GetRole
DROP TABLE B