求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 @