如何在不使用FOR XML PATH('')的情况下将其他重复行的不同列连接成一行?

时间:2014-04-17 19:57:48

标签: sql sql-server concatenation for-xml-path

我有这个问题:

SELECT DISTINCT
            f1.CourseEventKey,
            STUFF
            (
                (
                    SELECT      '; ' + Title
                    FROM        (
                                    SELECT DISTINCT
                                                ces.CourseEventKey,
                                                f.Title
                                    FROM        CourseEventSchedule ces
                                    INNER JOIN  Facility f ON f.FacilityKey = ces.FacilityKey
                                    WHERE       ces.CourseEventKey IN
                                                (
                                                    SELECT      CourseEventKey
                                                    FROM        @CourseEvents
                                                )
                                ) f2
                    WHERE       f2.CourseEventKey = f1.CourseEventKey
                    FOR XML PATH('')
                ), 1, 2, ''
            )
FROM        (
                SELECT DISTINCT
                            ces.CourseEventKey,
                            f.Title
                FROM        CourseEventSchedule ces
                INNER JOIN  Facility f ON f.FacilityKey = ces.FacilityKey
                WHERE       ces.CourseEventKey IN
                            (
                                SELECT      CourseEventKey
                                FROM        @CourseEvents
                            )
            ) f1

它产生这个结果集:

CourseEventKey Titles
-------------- ----------------------------------
29             Test Facility 1
30             Memphis Training Room
32             Drury Inn & Suites Creve Coeur

数据准确无误,但我无法FOR XML PATH(''),因为它会逃脱某些特殊字符。

要明确,我使用的是FOR XML PATH(''),因为具有相同CourseEventKey的记录可能会有多个Facility个与之关联的标题。

如何在不使用FOR XML PATH('')的情况下保留此查询返回的数据?

1 个答案:

答案 0 :(得分:1)

将“for xml path(''))”部分更改为“for xml path(''),root('root'),type).query('root')。value('。',' varchar(max)')“这将正确地解开字符。

抱歉格式不佳,但现在不在我的电脑上。如果你需要,我可以稍后给出一个完整的例子。