2013-12-18 30 views
4

我在sql server中有兩個表UserUserRolesUser表具有基本的用戶信息,例如, UserId,Name等和UserRoles有像UserId,RoleName列。這兩個表之間有一對多的關係,即一個用戶可以有多個角色。如何在sql server中連接一對多記錄

用戶

UserId Name 
1  A 
2  B 
3  C 

的UserRole

UserId Rolename 
1  Manager 
1  Event Organiser 
2  Supervisor 
2  Employee 
2  Some otherRole 

我需要寫在SQL將返回象下面的查詢。即串聯一對多記錄到一個單一的字符串

UserId Roles 
1  Manager,Event Organiser 
2  Supervisor,Employee,Some otherRole 

回答

5

你必須使用以下2 SQL函數

XML Path - 對於級聯

Stuff對於逗號分隔

select UserId, 
    stuff((select ',' + t2.Rolename 
    from UserRoles t2 where t1.UserId = t2.UserId 
    for xml path('')),1,1,'') Roles 
from UserRoles t1 
group by UserId 

SQL Fiddle

+0

LUV的,偉大的答案 - 錯字的級聯。對不起,我不能編輯我沒有這個小改動的代表。 – Liath

+0

@Luv感謝哥們 – rumi

0

試試這個,

Declare @t1 table(UserId int,name varchar(20)) 
insert into @t1 values(1,'A'),(2,'B'),(3,'C') 
--select * from @t1 
Declare @t table(UserId int,Rolename varchar(20)) 
insert into @t values(1,'Manager'),(1,'Event Organiser'),(2,'Supervisor'),(2,'Employee'),(2,'Some otherRole') 

select 
userid, 
stuff((select ','+ Rolename from @t b where a.UserId=b.UserId for xml path('')),1,1,'') [Roles] 
from @t1 a