如何在SQL Server中获取逗号分隔值?

时间:2012-03-09 15:29:57

标签: sql-server

我有两个名为tblEmployeetblWorkPlace的表。第二个表由每个员工的多行组成。我想得到如下结果

EmployeeName   WorkPlace
Gopi           India,Pakistan,...

即。如果tblWorkPlace包含员工的多行,我希望结果在一行中,数据用逗号分隔。

我如何得到这个结果????

4 个答案:

答案 0 :(得分:2)

您需要在客户端拥有代码才能实现此目的。可以在sql server中实现这一点,但这并不是一件容易的事,性能太可怕了,而且这种事情无论如何都不属于数据库

答案 1 :(得分:2)

你不清楚如何连接表tblWorkplacetblEmployee - 我假设通过多对多链接表或其他东西。

如果是这种情况,您可以使用以下内容:

SELECT
    e.EmpName, 
    (SELECT STUFF(
        (SELECT ',' + w.WPName
         FROM @Workplace w 
         INNER JOIN @WorkplaceEmployeesLink we ON w.WorkplaceID = we.WorkplaceID
         WHERE we.EmpID = e.EmpID
         FOR XML PATH('')
        ), 1, 1, '')
    ) AS Workplaces
FROM @Employee e

我已使用自己的表变量@Employee@Workplace等替换了您的表格以进行测试

这给了我一个类似的输出:

EmpName  Workplaces
Gopi     India,Pakistan

这一行。

基本上,内部FOR XML PATH('')会为每位员工选择工作场所列表,并在每个工作区前加上',',以便获得,India,Pakistan之类的内容。

STUFF方法然后将空字符串填充到结果字符串中,位置1,长度为1 - 基本上擦除第一个逗号,从而根据需要获得工作区列表。

答案 2 :(得分:0)

您可以在select语句中为变量分配多个值。我称之为“扁平化”记录。

declare @WorkPlace varchar(max)
select @WorkPlace = ''  -- it is important to be NOT null

select @WorkPlace = @WorkPlace + WorkPlace + ', '
  from YourTable
 where EmployeeName = 'Gopi'

您可能需要添加一些代码以从字符串中删除最终的','。

答案 3 :(得分:0)