2013-10-31 41 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