具有明确的排序条款

时间:2013-10-31 13:14:47

标签: sql sql-server tsql

我在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,'')

我正处于异常

之下
  

如果指定了SELECT DISTINCT,则ORDER BY项必须出现在选择列表中。

请给我一些建议。

1 个答案:

答案 0 :(得分:12)

您可以删除DISTINCT并添加GROUP BY以与ORDER 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