如何在SQL中将三个表中的多个行组合成一个单独的字符串?

时间:2016-07-21 19:31:57

标签: sql sql-server select

我有三个表根据录取过程存储不同类型的数据。

第一个表格([dbo]。[Inscripciones_Pregrado])存储未来学生的基本联系信息。第二个表([dbo]。[Checklist_Documentos])存储学生完成录取过程所必须具备的文件的名称和ID。第三个表格([dbo]。[Checklist_Pregrado])存储学生有效带到招生办公室的文件。

我需要结合这些信息,以便我们可以导出包含所有联系信息的excel文件,以及每个学生的文档清单。

所以,让我们说表1有4条记录: [DBO]。[Inscripciones_Pregrado]

enter image description here

第二个表([dbo]。[Checklist_Documentos])有八个记录,不同类型的请求文件: enter image description here

第三张表([dbo]。[Checklist_Pregrado])有16条记录:

enter image description here

我需要的是这三张牌根据上进的ID组合:

enter image description here

到目前为止,我已经尝试过不同类型的代码:

代码1

SELECT
    [dbo].[Inscripciones_Pregrado].[ID],
    [dbo].[Inscripciones_Pregrado].[Name],
    [dbo].[Inscripciones_Pregrado].[ProgramID],
    [dbo].[Checklist_Documentos].[Document] 
FROM [dbo].[Inscripciones_Pregrado] 

INNER JOIN
    [dbo].[Checklist_Pregrado]
    ON [dbo].[Checklist_Pregrado].[IdForm] = [dbo].[Inscripciones_Pregrado].[ID]

INNER JOIN
    [dbo].[Checklist_Documentos]
    ON [dbo].[Checklist_Documentos].[ID] = [dbo].[Checklist_Pregrado].[IdDoc]

这个每个文档得一行,所以根据有志者在其文件夹中的文档数量重复名称和其他记录。

代码2

SELECT
    [dbo].[Inscripciones_Pregrado].[ID],
    [dbo].[Inscripciones_Pregrado].[Nombres],
    [dbo].[Inscripciones_Pregrado].[Apellido1],
    (STUFF((SELECT CAST(', ' + [dbo].[Checklist_Pregrado].[IdDocumento] AS varchar(max))
        FROM [dbo].[Checklist_Pregrado]
        WHERE([dbo].[Inscripciones_Pregrado].[ID] = [dbo].[Checklist_Pregrado].[IdForm])
        FOR XML PATH ('')), 1, 2, '')) AS [Docs]
FROM [dbo].[Inscripciones_Pregrado]

此代码获取和错误: 转换varchar值时转换失败','数据类型int。

感谢您的所有帮助和评论。

由于

2 个答案:

答案 0 :(得分:1)

对于代码2 ,您可以在执行连接之前执行CAST 来修复错误。

换句话说:

(STUFF((SELECT ', ' + CAST([dbo].[Checklist_Pregrado].[IdDocumento] AS varchar(max))

答案 1 :(得分:1)

@Tab Alleman给了我答案的提示,我没有注意到写作中的错误。它解决了这个问题,但代码只会从第二个表中获取文档的ID([dbo]。[Checklist_Documentos])所以我添加了一个INNER JOIN来组合数据:

db.getMongo().setSlaveOk()