0

I have tried below one using XML Path but getting error.

Conversion failed when converting the varchar value ',' to data type int.

Can you correct the below query.

SELECT STUFF((SELECT ',' + COUNT(E.EMployeeId) FROM EMployee E WHERE E.DepartmentId IN(SELECT DepartmentId FROM Department) 
            FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,1,'') 

Required Output

5,7,8,9
Your Common Sense
  • 156,878
  • 40
  • 214
  • 345
Balanjaneyulu K
  • 3,660
  • 5
  • 24
  • 45

1 Answers1

1

Try the following:

The COUNT() Returns integer value, you can't merge int with varchar. So you have to convert the value to char.

SELECT STUFF((SELECT ',' + CAST(COUNT(E.EMployeeId) AS VARCHAR) FROM EMployee E WHERE E.DepartmentId IN(SELECT DepartmentId FROM Department) 
            FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,1,'')

Try this answer, If you face any issue, mention in the comments:

SELECT DISTINCT DepartmentId,
     STUFF(
        (
            SELECT ',' + CAST(COUNT(E.EMployeeId) AS VARCHAR) 
            FROM EMployee E 
            WHERE E.DepartmentId IN(SELECT DepartmentId FROM Department) 
                AND E.DepartmentId=T.DepartmentId
            FOR XML PATH(''), TYPE
            ), 1, 1, '') AS id_list
FROM EMployee as T

Try this one for, both department and COUNT() in Comma separated:

SELECT STUFF((SELECT ',' + CAST((DepartmentId)AS VARCHAR) 
FROM(
    SELECT DepartmentId,COUNT(EMployeeId) EMployeeId
    FROM EMployee E 
    WHERE E.DepartmentId IN(SELECT DepartmentId FROM Department) 
    GROUP BY DepartmentId
    )E
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,1,'') DepID
    ,STUFF((SELECT ',' + CAST((EMployeeId)AS VARCHAR)
FROM(
    SELECT DepartmentId,COUNT(EMployeeId) EMployeeId
    FROM EMployee E 
    WHERE E.DepartmentId IN(SELECT DepartmentId FROM Department) 
    GROUP BY DepartmentId
    )E
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,1,'')EmpCount
DineshDB
  • 5,998
  • 7
  • 33
  • 49