我有两个名为tblEmployee
和tblWorkPlace
的表。第二个表由每个员工的多行组成。我想得到如下结果
EmployeeName WorkPlace
Gopi India,Pakistan,...
即。如果tblWorkPlace
包含员工的多行,我希望结果在一行中,数据用逗号分隔。
我如何得到这个结果????
答案 0 :(得分:2)
您需要在客户端拥有代码才能实现此目的。可以在sql server中实现这一点,但这并不是一件容易的事,性能太可怕了,而且这种事情无论如何都不属于数据库。
答案 1 :(得分:2)
你不清楚如何连接表tblWorkplace
和tblEmployee
- 我假设通过多对多链接表或其他东西。
如果是这种情况,您可以使用以下内容:
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)