如何在SELECT中没有列的情况下排序BY

时间:2012-10-25 15:08:32

标签: sql sql-server

我正在使用MS-SQL,我有一个这样的表:

Count  Code
1      A
2      C
3      A
4      B
5      C
6      B

我只需要获取Code列的Distinct Row,但我需要保持Column的顺序以创建一个逗号分隔的字符串,如下所示:

    A, C, B

如果指定了SELECT DISTINCT,我已尝试使用以下代码来获取Msg 145的SQL错误,级别15 - ORDER BY项必须出现在选择列表中。

SELECT @tlist = ISNULL(@tlist+', ','') + Code 
FROM (SELECT DISTINCT t.Code  
     FROM @Table t) 

但我得到了A,B,C的输出

2 个答案:

答案 0 :(得分:4)

所以,你不想要distinct。你想要group by

select t.code
from @Table t
group by t.code
order by min(count)

您可以按select子句中未提及的列进行排序。

要将逗号分隔列表作为单个变量,请使用以下技术:

select stuff((select ', '+t.code
              from @Table t
              group by t.code
              order by min(count)
              for xml path ('')
             ), 1, 2, '')
子查询中的

Order by通常是未定义的。而且,按顺序将列表连接在一起的方法并不能保证有效。

答案 1 :(得分:3)

在子查询中订购它们

SELECT DISTINCT t.Code  
FROM @Table t
ORDER BY t.Code