日期:2014-05-18  浏览次数:20913 次

求SQL 语句,高难度.在线等!!!!
表   USER
ID       NAME   TXT_GRNATLIST     Txt_DataSourceList
1         admin   1,2                       1,2,3
2         test     1                                 2

表   datasource
ID       NAME  
1         主数据
2         次数据
3         测试数据
表   GRNATS  

ID   NAME                     Grant

1     系统管理员           1,2,3,4
2     市场部管理员       1,2

想要的结果是:

USER的ID   ,USER的NAME   ,datasource   的NAME   ,GRNATS   的Name

例如:
1       admin     主数据,次数据,测试数据       系统管理员,市场部管理员
2       test       次数据                                       市场部管理员

大家来帮下忙啊!


------解决方案--------------------
create table [user]([id] int,[name] varchar(20),TXT_GRNATLIST varchar(10),Txt_DataSourceList varchar(10))
insert [user] select 1, 'admin ', '1,2 ', '1,2,3 '
union all select 2, 'test ', '1 ', '2 '

create table datasource([id] int,[name] varchar(20))
insert datasource select 1, '主数据 '
union all select 2, '次数据 '
union all select 3, '测试数据 '

create table GRNATS([id] int,[name] varchar(20),[Grant] varchar(10))
insert GRNATS select 1, '系统管理员 ', '1,2,3,4 '
union all select 2, '市场部管理员 ', '1,2 '
go

create function fun1(@s varchar(100))
returns varchar(100)
as
begin
select @s=replace(@s,id,name) from datasource
return @s
end
go

create function fun2(@s varchar(100))
returns varchar(100)
as
begin
select @s=replace(@s,id,name) from GRNATS
return @s
end
go

select [USER的ID]=id,[USER的Name]=name,[datasource的NAME]=dbo.fun1(Txt_DataSourceList),
[GRNATS的Name]=dbo.fun2(TXT_GRNATLIST) from [user]

drop table [user],datasource,GRNATS
drop function fun1,fun2

1 admin 主数据,次数据,测试数据 系统管理员,市场部管理员
2 test 次数据 系统管理员

------解决方案--------------------
不好意思 ,刚接了一个电话 ,有人先帖了,不过我还是贴上我的


create table USERt(ID int,NAME char(5),TXT_GRNATLIST varchar(10), Txt_DataSourceList varchar(10))
go
create table datasource(ID int,NAME varchar(10))
go
create table GRNATS(ID int,NAME varchar(20),grant1 varchar(20))
go

create function getstr(@content varchar(200))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str= ' '
select @str=@str+ ', '+NAME from GRNATS where CHARINDEX(cast(id as varchar(2)) ,@content,1)> 0
select @str=right(@str,len(@str)-1)
return @str
end
go
create function getstr1(@content varchar(200))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str= ' '
select @str=@str+ ', '+NAME from datasource where CHARINDEX(cast(id as varchar(2)) ,@content,1)> 0
select @