SQL 将多个表中的行连接到以逗号分隔的单个文本字段中
SQL Concatenate rows from multiple tables into single text field separated by comma
我有 3 table
项目、顾问、联系人。
顾问 table 是一个 linking table,仅包含 3 个字段,Projectid、Consultantid 和 Contactid,link 作为项目的联系人顾问。从联系人到项目没有直接的link。顾问的全名在联系人table中。项目编号在项目table.
中
项目:
项目编号
联系方式:
联系方式,Consultant_Full_name
顾问:Consultantid、Projectid、Contactid
我在 SSRS 中构建了一个 table 来显示项目字段,并希望在末尾添加一个列来显示每个项目的所有顾问 link
示例 -
+---------------+--------------------------------------+
| ProjectNumber | Consultants |
+---------------+--------------------------------------+
| 12356 | Mary White, Fred Bloggs, Peter Jones |
| 12445 | Fred Bloggs, Paul White |
+---------------+--------------------------------------+
我写的代码是:
SELECT t2.ProjectNumber
,consultant = STUFF((
SELECT ',' + fullname
FROM FilteredContact t1
WHERE t1.contactid = t2.ConsultantID
FOR XML PATH('')
), 1, 1, '')
FROM (
SELECT proj.ccx_projectnumber AS ProjectNumber
,link.contactid AS ConsultantID
,con.fullname AS ConsultantName
FROM FilteredContact con
INNER JOIN Filteredccx_ccx_project_contact_consultant AS link ON con.contactid = link.contactid
INNER JOIN Filteredccx_project proj ON link.ccx_projectid = proj.ccx_projectid
) t2
GROUP BY t2.ProjectNumber
我知道这没有正确分组,因为 Contactid 需要按语句聚合或分组,但我不知道如何正确地进行分组。我在想,也许我没有正确 linked tables。如果我使用
group by ts.ProjectNumber, Contactid
每个顾问的结果是一行,而不是我想要的每个项目。
感激地接受任何帮助。
我正在使用 Sql 服务器 2008
这就是你想要的
;WITH CTE
AS (
SELECT proj.ccx_projectnumber AS ProjectNumber
,con.fullname AS ConsultantName
FROM Filteredccx_ccx_project_contact_consultant AS link
INNER JOIN Filteredccx_project proj ON link.ccx_projectid = proj.ccx_projectid
INNER JOIN FilteredContact con ON link.contactid = con.contactid
)
SELECT DISTINCT ProjectNumber
,STUFF((
SELECT ',' + ConsultantName
FROM CTE C1
WHERE C.ProjectNumber = C1.ProjectNumber
FOR XML PATH('')
), 1, 1, '')
FROM CTE C
我有 3 table
项目、顾问、联系人。
顾问 table 是一个 linking table,仅包含 3 个字段,Projectid、Consultantid 和 Contactid,link 作为项目的联系人顾问。从联系人到项目没有直接的link。顾问的全名在联系人table中。项目编号在项目table.
中项目: 项目编号
联系方式: 联系方式,Consultant_Full_name
顾问:Consultantid、Projectid、Contactid
我在 SSRS 中构建了一个 table 来显示项目字段,并希望在末尾添加一个列来显示每个项目的所有顾问 link
示例 -
+---------------+--------------------------------------+
| ProjectNumber | Consultants |
+---------------+--------------------------------------+
| 12356 | Mary White, Fred Bloggs, Peter Jones |
| 12445 | Fred Bloggs, Paul White |
+---------------+--------------------------------------+
我写的代码是:
SELECT t2.ProjectNumber
,consultant = STUFF((
SELECT ',' + fullname
FROM FilteredContact t1
WHERE t1.contactid = t2.ConsultantID
FOR XML PATH('')
), 1, 1, '')
FROM (
SELECT proj.ccx_projectnumber AS ProjectNumber
,link.contactid AS ConsultantID
,con.fullname AS ConsultantName
FROM FilteredContact con
INNER JOIN Filteredccx_ccx_project_contact_consultant AS link ON con.contactid = link.contactid
INNER JOIN Filteredccx_project proj ON link.ccx_projectid = proj.ccx_projectid
) t2
GROUP BY t2.ProjectNumber
我知道这没有正确分组,因为 Contactid 需要按语句聚合或分组,但我不知道如何正确地进行分组。我在想,也许我没有正确 linked tables。如果我使用
group by ts.ProjectNumber, Contactid
每个顾问的结果是一行,而不是我想要的每个项目。 感激地接受任何帮助。
我正在使用 Sql 服务器 2008
这就是你想要的
;WITH CTE
AS (
SELECT proj.ccx_projectnumber AS ProjectNumber
,con.fullname AS ConsultantName
FROM Filteredccx_ccx_project_contact_consultant AS link
INNER JOIN Filteredccx_project proj ON link.ccx_projectid = proj.ccx_projectid
INNER JOIN FilteredContact con ON link.contactid = con.contactid
)
SELECT DISTINCT ProjectNumber
,STUFF((
SELECT ',' + ConsultantName
FROM CTE C1
WHERE C.ProjectNumber = C1.ProjectNumber
FOR XML PATH('')
), 1, 1, '')
FROM CTE C