4

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

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

我只需要获取代码列的不同行,但我需要保持列的顺序来创建一个逗号分隔的字符串,如下所示:

    A, C, B

我尝试使用以下代码未收到消息 145、级别 15 的 SQL 错误 - 如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中。

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

但我得到 A、B、C 的输出

4

2 回答 2

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在子查询中通常是未定义的。而且,您将列表按顺序连接在一起的方法不能保证有效。

于 2012-10-25T15:20:37.990 回答
3

在您的子查询中订购它们

SELECT DISTINCT t.Code  
FROM @Table t
ORDER BY t.Code
于 2012-10-25T15:10:06.680 回答