具有明确的排序条款

San*_*tha 5 sql t-sql sql-server

我在sql server中有一个表,其中有一些值.例如如下,

StationId
-----
3
11
4
Run Code Online (Sandbox Code Playgroud)

我写了一个如下查询,

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

输出如下:

[11],[3],[4]
Run Code Online (Sandbox Code Playgroud)

现在我的要求是我需要输出为[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,'')
Run Code Online (Sandbox Code Playgroud)

我正在低于例外

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

请给我一些建议.

Tar*_*ryn 12

您可以通过删除DISTINCT并添加a 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,'')
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo