2017-10-19 145 views
0

我正在使用找到的解決方案here,但我需要忽略FOR XML PATH中的排序。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

沒有「精確」的順序,除非您指定一個列來生成您的樣本一列輸出中的排序。實際上,即使您目前看到的訂單也隨時可能發生變化,SQL Server可以自由使用任何期望的訂單。 –

+0

@TimBiegeleisen感謝您的迴應Tim,請參閱我提出的問題的更新。 – Kevin

+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是指定每個更新的問題排序列。

+0

我試過這個,但我沒有工作。請參閱此SQLFiddle http://www.sqlfiddle.com/#!6/b2e655/5。謝謝。 – Kevin

+0

我現在正在工作,只是表名上的一些錯誤。謝謝。 – Kevin