首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-01-02 
對高手來說很簡單,對我來說很復雜的問題,請教大家…表1:姓名去過的地方張三a,b,h李四

對高手來說很簡單,對我來說很復雜的問題,請教大家…
表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

热点排行