2017-06-13 31 views
0

选择**您好, 我有3个表:从多个表

users  
certification  
project 

我需要为用户ECH选择认证的名单和项目的类的列表:

-------------------------------------------------------------------- 
userid | fullname | list of certification | list of project 
-------------------------------------------------------------------- 
1  | xX  | ITIL ,Cisco,..   | PROj 1 ,Proj 2 ... 

我试试这个**

select users.fullname,users.team,users.jobtitle,certif= STUFF(
     (SELECT ','+ certifiacte 
     FROM dbo.certification a 
     INNER JOIN dbo.Users ar ON ar.UserId = a.UserId 

     FOR XML PATH('')), 1, 1, ''),porj= STUFF(
     (SELECT ','+ project 
     FROM dbo.project a 
     INNER JOIN dbo.Users ar ON ar.UserId = a.UserId 

     FOR XML PATH('')), 1, 1, '') 
from Users 

但问题是我得到的所有证书和项目保存在数据库中的列表在所有的行中。但我需要为每个用户列出与他有关的项目和认证信息。

回答

0

任何时候发生这种情况都意味着你不相关。您的子查询与您的外部查询无关。

你需要做这个:

select ar.fullname,ar.team,ar.jobtitle,certif= STUFF(
     (SELECT ','+ certifiacte 
     FROM dbo.certification a 
     WHERE ar.UserId = a.UserId  
     FOR XML PATH('')), 1, 1, ''),porj= STUFF(
     (SELECT ','+ project 
     FROM dbo.project a 
     WHERE ar.UserId = a.UserId 
     FOR XML PATH('')), 1, 1, '') 
from Users ar 
+0

感谢标签Alleman – marwen