作为SQL选择结果的一部分的逗号分隔列表

作为SQL选择结果的一部分的逗号分隔列表,sql,Sql,我想返回一个员工列表,关于他们的各种信息,以及一个列,其中列出了他们每个月分配给他们的前3个项目的时间,以逗号分隔。我有一个select语句可以成功地返回小时数,但我不确定如何将其嵌入select语句网。下面是select语句。我正试图在SQLServer中实现这一点 DECLARE @Projects varchar(max) SELECT Top(3) @Projects = COALESCE(@Projects+', ' ,'') + ltrim(rtrim(Pro

我想返回一个员工列表,关于他们的各种信息,以及一个列,其中列出了他们每个月分配给他们的前3个项目的时间,以逗号分隔。我有一个select语句可以成功地返回小时数,但我不确定如何将其嵌入select语句网。下面是select语句。我正试图在SQLServer中实现这一点

        DECLARE @Projects varchar(max)
    SELECT Top(3) @Projects = COALESCE(@Projects+', ' ,'') + ltrim(rtrim(Projects.Title))
                FROM         EmployeeProjectPlanning INNER JOIN
                  Projects ON EmployeeProjectPlanning.ProjectID = Projects.ProjectID
                WHERE     (EmployeeProjectPlanning.EmpID = 1) AND (EmployeeProjectPlanning.MonthID = 9) AND (EmployeeProjectPlanning.Year = 2011)
                ORDER BY EmployeeProjectPlanning.Hours DESC
    SELECT @Projects

假设您使用的是SQL 2005或更高版本,则可以使用
FOR XML
在一个字段中创建逗号分隔的列表。只需在需要项目列的
SELECT
语句中添加以下内容:

SUBSTRING(
    (SELECT TOP (3) ','+ltrim(rtrim(Projects.Title)) 
     FROM  EmployeeProjectPlanning AS emp
     INNER JOIN Projects as proj ON emp.ProjectID = proj.ProjectID
     WHERE (emp.EmpID = 1)
        AND (emp.MonthID = 9)
        AND (emp.Year = 2011)
     ORDER BY emp.Hours DESC
    FOR XML PATH('')
),2,8000) AS Projects

请,请,请告诉我们您使用的是什么SQL产品。MySQL和SQLite可以通过GROUP_CONCAT实现这一点,在SQL Server中,您需要编写一个标量存储过程来实现这一点。此外,如果访问权限允许的话,我发现创建一个聚合CLR函数来模拟MySQL的group_concat也很有用。