2013-04-11 17 views
0

我有两个表:如何获得查询的结果,其中有几行,结果是在一行中由一个分隔符分隔但又有另一列?

Employers: 
emp_id:  emp_name: 
1   Smith 
2   John 
3   Terry 
4   Sue 

和antoher一个,

Skills: 
emp_id: skill: 
1  10 
1  12 
1  14 
2  5 
2  15 

我想要得到的查询返回这样的:我能得到

emp_id: skill: 
1  10,12,14 
2  5,15 

到目前为止作为字符串的技能值使用:

SELECT STUFF((SELECT DISTINCT ', ' + skill) AS [text()] 
FROM employers inner join skills where emp_id=1 
FOR XML PATH ('')),1,1,'') 

但这没有帮助,因为我需要将我的项目中的值连接到其他列,我还需要emp_id。

任何提示?

回答

2

您可以使用以下的值连接成一排:

select e.emp_id, 
    e.emp_name, 
    STUFF((SELECT distinct ', ' + cast(s.skill as varchar(10)) 
     from Skills s 
     where e.emp_id = s.emp_id 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,2,'') skills 
from employers e; 

SQL Fiddle with Demo

,那么你仍然可以参加在employers表。

或者你可以使用CROSS APPLYFOR XML PATH

select e.emp_id, 
    e.emp_name, 
    left(s.skills, len(s.skills)-1) skills 
from Employers e 
cross apply 
(
    select cast(s.skill as varchar(10)) + ', ' 
    from Skills s 
    where e.emp_id = s.emp_id 
    FOR XML PATH('') 
) s (skills); 

SQL Fiddle with Demo

+1

谢谢,你是最棒的。祝你有美好的一天。 – BogdanM 2013-04-11 11:23:54

1

尝试这一个 - 很多

DECLARE @Employee TABLE 
(
     emp_id INT 
    , emp_name NVARCHAR(50) 
) 

DECLARE @Skill TABLE 
(
     emp_id INT 
    , skill_id INT 
) 

INSERT INTO @Employee (emp_id, emp_name) 
VALUES 
    (1, 'Smith'), 
    (2, 'John'), 
    (3, 'Terry'), 
    (4, 'Sue') 

INSERT INTO @Skill (emp_id, skill_id) 
VALUES 
    (1, 10), 
    (1, 12), 
    (1, 14), 
    (2, 5), 
    (2, 15) 

SELECT 
     e.emp_id 
    , skills = 
     (
      SELECT STUFF((
      SELECT DISTINCT ', ' + CAST(s.skill_id AS VARCHAR(10)) 
      FROM @Skill s 
      WHERE s.emp_id = e.emp_id 
      FOR XML PATH(N''), TYPE, ROOT).value(N'root[1]', N'NVARCHAR(MAX)'), 1, 2, '') 
     ) 
FROM @Employee e 
+0

非常感谢,但我不能在数据库上创建表;我在一个SSIS包中使用查询,一个执行Sql任务,所以我需要一个querry。再次感谢,并祝你有美好的一天。 – BogdanM 2013-04-11 11:26:49

相关问题