2013-10-31 75 views
5

我有一個sql server中的表,我有一些值。例如下面,按不同的條款排序

StationId 
----- 
3 
11 
4 

我寫了一個查詢如下,

select STUFF((SELECT distinct (',' + QuoteName(c.StationId)) 
      FROM Analytics c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

其中輸出如下:

[11],[3],[4] 

現在,我的要求是我所需要的輸出[3],[4],[11]。因此,當重寫查詢作爲

select STUFF((SELECT distinct (',' + QuoteName(c.StationId)) 
      FROM Analytics c ORDER BY c.StationId 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

我得到異常下面

ORDER BY項目如果指定SELECT DISTINCT必須出現在選擇列表中。

請給我一些建議。

回答

11

您可以通過刪除DISTINCT並添加一個GROUP BYORDER BY使用改變你的代碼:

select STUFF((SELECT (',' + QuoteName(c.StationId)) 
      FROM Analytics c 
      group by c.StationId 
      ORDER BY c.StationId 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SQL Fiddle with Demo