【发布时间】:2015-06-10 00:34:46
【问题描述】:
我希望创建一个 SQL Server 查询,该查询将使用三个表将具有相同任务的资源组合成一个行/记录字符串。下面的我的 SQL Server 查询似乎无法正常工作,需要很长时间才能执行,然后出错。谢谢!
任务表
TaskUID
TaskName
作业表
TaskUID
ResourceUID
资源表
ResourceUID
ResourceName
之前
**Task Name Resource Name**
Weapon Launch Amy
Weapon Launch Sam
Weapon Launch Marisa
Weapon Launch Katy
Weapon Launch John
Sweating Tears Marisa
Sweating Tears Joe
Sweating Tears Katy
Sweating Tears Michael
Ramp Diver Joe
Ramp Diver Michael
之后
**Task Name Resource Name**
Weapon Launch Amy; Sam; Marisa; Katy; John
Sweating Tears Marisa; Joe; Katy; Michael
Ramp Diver Michael; Joe
查询
SELECT T.TaskName,
STUFF(( SELECT ', ' + R.RESOURCENAME
FROM
[Resource Table] R
LEFT JOIN [Assignment Table] A ON R.ResourceUID=A.ResourceUID
WHERE
A.TASKUID=T.TaskUID
Group by R.RESOURCENAME
FOR XML PATH('')), 1, 1,'') Resources
FROM [Task Table] T
INNER JOIN [Assignment Table] A ON T.TASKUID=A.TASKUID
【问题讨论】:
-
带回三个结果集并自己将它们压缩在一起。这是最简单的方法。
-
查看this SO post了解如何执行此操作。
-
您可以使用程序集创建聚合函数。
-
您的表中有索引吗?它有很大的不同。我相信 ID 是 Resource 和 Task 表的索引。 [分配表]呢? (sqlfiddle.com/#!3/4efb8/1)
-
不,我们在表中没有索引。