2013-10-31 39 views
5

Tôi có một bảng trong máy chủ sql mà tôi có một số giá trị. Ví dụ như dưới đây,Sắp xếp theo mệnh đề với riêng biệt

StationId 
----- 
3 
11 
4 

Tôi đã viết một truy vấn như dưới đây,

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

nơi đầu ra như sau:

[11],[3],[4] 

Bây giờ yêu cầu của tôi là tôi cần đầu ra như [3],[4],[11]. Vì vậy, khi viết lại truy vấn như

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

Tôi nhận được dưới đây ngoại lệ

ORDER BY mục phải xuất hiện trong danh sách lựa chọn nếu chọn riêng biệt được xác định.

Vui lòng cho tôi một số gợi ý.

Trả lời

11

Bạn có thể thay đổi mã của bạn bằng cách loại bỏ các DISTINCT và thêm một GROUP BY để sử dụng với 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,'') 

Xem SQL Fiddle with Demo

Các vấn đề liên quan