我有一个名为'Employee'的主表和另一个名为'EmployeeTypes'的从属表,它有一个来自'Employee'的FK。
'Employee'中的每一行在'EmployeeTypes'中可以有零行或多行,我想创建一个返回所有Employees数据的SQL Query,每个雇员行应在'EmployeeTypes'中包含其相关数据(例如列)称为“TypeID”)为逗号分隔列表,如下所示:
Meco Beco --- 45 ---- 1,2,3
答案 0 :(得分:1)
SELECT DISTINCT Name, e2.EmployeeID,ISNULL((SELECT STUFF((SELECT ',' + CAST(EmployeeType AS VARCHAR(20)) FROM Employee e JOIN EmployeeType et ON (e.EmployeeID = et.EmployeeID) WHERE e.EmployeeID = e2.EmployeeID ORDER BY et.EmployeeType FOR XML PATH('')),1,1,'')),'n/a') [EmployeeTypes] FROM Employee e2 LEFT JOIN EmployeeType et2 ON (e2.EmployeeID = et2.EmployeeID)
答案 1 :(得分:0)
您可以通过将使用Coalese生成CSV列表方法的UDF与标准sql语句组合来实现此目的。
udf看起来像:
create function ConcatEmployeeTypes(@employeeid int)
returns varchar(max)
as
begin
declare @result varchar(max)
select @result = coalesce(@result + ', ', '') + employeeType
from employeeTypes
where employeeId = @employeeid
return @result
end
然后您可以像这样简单地调用udf:
select employeename, dbo.ConcatEmployeeTypes(employeeid)
from Employees
答案 2 :(得分:0)
您可能需要创建一个临时表来“展平”主从关系,然后根据此临时表中的字段动态创建查询。
有关详细信息,请参阅此earlier question and answers。