-1

I have following 3 tables:

enter image description here.......
enter image description here....... enter image description here ………………………… ……………………………… …………………………

I run the following query

SELECT Employee.EmployeeId,
  EmployeeName,
  ProjectName
FROM Employee
JOIN ProjEmp
ON Employee.EmployeeId=ProjEmp.EmployeeId
JOIN Project
ON Project.ProjectId=ProjEmp.ProjectId

And it gives following result:

enter image description here

But I need result like this:

enter image description here

Suggest me the best query for my desired result.

Guneli
  • 1,691
  • 1
  • 11
  • 17
Banketeshvar Narayan
  • 3,799
  • 4
  • 38
  • 46

1 Answers1

2

You can do the following to get what you are looking for :

WITH CTE AS(SELECT Employee.EmployeeId,
  EmployeeName,
  ProjectName
FROM Employee
JOIN ProjEmp
ON Employee.EmployeeId=ProjEmp.EmployeeId
JOIN Project
ON Project.ProjectId=ProjEmp.ProjectId)

SELECT EmployeeId,EmployeeName,
      ProjectName = STUFF((
          SELECT ',' + convert(varchar(10),T2.ProjectName)
          FROM CTE T2
          WHERE T1.EmployeeName = T2.EmployeeName
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM CTE T1
GROUP BY EmployeeId,EmployeeName
ORDER BY EmployeeId

Result:

EMPLOYEEID   EMPLOYEENAME   PROJECTNAME
1            Emp1           ProjA,ProjB
3            Emp3           ProjC
4            Emp4           ProjC,ProjD
5            Emp5           ProjE
7            Emp7           ProjE
8            Emp8           ProjE

See result in SQL Fiddle.

Raging Bull
  • 18,593
  • 13
  • 50
  • 55