如何将多行中的文本连接成SQL服务器中的单个文本字符串String?

[

鉴于indexing随着数据集规模的增加,这一点非常重要,有人可以解释一下如何在一个database-agnostic级别上进行索引工作?

如何将多行中的文本连接成SQL服务器中的单个文本字符串String?

当我试图用一对多关系连接两个表时,我遇到了类似的问题。在SQL 2005中,我发现该XML PATH方法可以很容易地处理行的连接。

如果有一个表叫 STUDENTS

SubjectID       StudentName
----------      -------------
1               Mary
1               John
1               Sam
2               Alaina
2               Edward

我预期的结果是:

SubjectID       StudentName
----------      -------------
1               Mary, John, Sam
2               Alaina, Edward

我使用了以下内容T-SQL:

Select Main.SubjectID,
       Left(Main.Students,Len(Main.Students)-1) As "Students"
From
    (
        Select distinct ST2.SubjectID, 
            (
                Select ST1.StudentName + ',' AS [text()]
                From dbo.Students ST1
                Where ST1.SubjectID = ST2.SubjectID
                ORDER BY ST1.SubjectID
                For XML PATH ('')
            ) [Students]
        From dbo.Students ST2
    ) [Main]

如果您可以在开始时对逗号进行连接并使用substring跳过第一个逗号,那么您可以以更紧凑的方式执行相同的操作,因此不需要执行子查询:

Select distinct ST2.SubjectID, 
    substring(
        (
            Select ','+ST1.StudentName  AS [text()]
            From dbo.Students ST1
            Where ST1.SubjectID = ST2.SubjectID
            ORDER BY ST1.SubjectID
            For XML PATH ('')
        ), 2, 1000) [Students]
From dbo.Students ST2

 

]
转载请保留页面地址:https://www.breakyizhan.com/sql/3973.html

posted on 2020-07-12 00:41  MrAit  阅读(123)  评论(0编辑  收藏  举报

导航