FOR XML PATH忽略字母顺序

时间:2017-10-19 02:53:56

标签: sql sql-server

我使用的是here找到的解决方案,但我需要忽略FOR XML PATH中的排序。

示例数据是:

ID      DisplayName
1        Editor
1        Reviewer
7        EIC
7        Editor
7        Reviewer
7        Editor
19       EIC
19       Editor
19       Reviewer

解决方案的结果是:

ID      DisplayName
1        Editor, Reviewer
7        Editor, EIC, Reviewer
19       Editor, EIC, Reviewer

我需要找到一种方法来阻止FOR XML PATH排列字符串并按照确切的顺序返回结果:

ID      DisplayName
1        Editor, Reviewer
7        EIC, Editor, Reviewer, Editor
19       EIC, Editor, Reviewer

更新:

我的表格如下:

ID      DisplayName      Sequence
1        Editor           1
1        Reviewer         2
7        EIC              1
7        Editor           2
7        Reviewer         3
7        Editor           4
19       EIC              1
19       Editor           2
19       Reviewer         3

所以我希望它根据每个ID的顺序组合字符串。

1 个答案:

答案 0 :(得分:2)

评论太长了。

SQL表代表无序集。除非列指定排序,否则行中没有排序。因此,你不能让结果与原始行“按照相同的顺序”,因为这个概念毫无意义。

如果您有订购栏,可以使用:

SELECT id,
        STUFF( (SELECT ', ' + DisplayName
                FROM #t b 
                WHERE b.ID = a.ID
                ORDER BY b.Sequence
                FOR XML PATH('')
               ), 1, 2, ''
             ) as displaynames
FROM (SELECT DISTINCT ID FROM #t) a;

此处Sequence是指定更新后问题的排序的列。