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

竖变横的小问题
有三张表:
用户表:userID,userName,age,tel
角色表:roleID,roleName
用户角色对应表:userID,roleID


一个用户可以有多个角色,重点是如何使角色(roleName)用顿号连起来?

比如说结果为:
userID           userName         age         tel                         roleName
1                     alice               19           139000000             总经理、管理员、财务


我试了很久都没有成功,还得请教大家,谢谢。

------解决方案--------------------

create table A(userID int,userName nvarchar(10),age int,tel nvarchar(10))
insert A select 1, 'alice ', 19, '139000000 '

create table B(roleID int,roleName nvarchar(10))
insert B select 1, '总经理 '
union all select 2, '管理员 '
union all select 3, '财务 '

create table C(userID int,roleID int)
insert C select 1, 1
insert C select 1, 2


create function fun(@userID int)
returns nvarchar(100)
as
begin
declare @re nvarchar(100)
set @re= ' '
select @re=@re+ '、 '+B.roleName
from C
inner join B on C.roleID=B.roleID
where C.userID=@userID

return stuff(@re, 1, 1, ' ')
end

select *, dbo.fun(userID) as roleName
from A

------解决方案--------------------
create table A(userID int,userName nvarchar(10),age int,tel nvarchar(10))
insert A select 1, 'alice ', 19, '139000000 '

create table B(roleID int,roleName nvarchar(10))
insert B select 1, '总经理 '
union all select 2, '管理员 '
union all select 3, '财务 '

create table C(userID int,roleID int)
insert C select 1, 1
insert C select 1, 2


create function fun(@userID int)
returns nvarchar(100)
as
begin
declare @re nvarchar(100)
set @re= ' '
select @re=@re+ '、 '+B.roleName
from C
inner join B on C.roleID=B.roleID
where C.userID=@userID

return stuff(@re, 1, 1, ' ')
end

select *, dbo.fun(userID) as roleName
from A