使用distinct连接列值会得到奇怪的结果

时间:2016-07-26 05:42:10

标签: sql sql-server tsql concatenation distinct

我有一个简单的一列表,有两个值。我选择它并使用distinct修饰符连接值,但它只获取最新值。我对DISTINCT有误解吗?

DECLARE @table TABLE(Id int) 
DECLARE @result VARCHAR(MAX) = ''

INSERT @table VALUES(1), (2)

SELECT 
    @result = @result + CAST( Id AS VARCHAR(10)) + ','
FROM 
    @table

SELECT @result  --— output: 1,2,

-------same With distinct
SET @result = ''

SELECT DISTINCT @result = @result 
        + CAST( Id AS VARCHAR(10)) + ','
FROM @table
SELECT @result  --— expected output: 1,2, actual output: 2,    why?

1 个答案:

答案 0 :(得分:4)

快速查看执行计划(以及一些游戏)向我展示了SELECT DISTINCT也进行了排序,因此您获得了最大ID。

例如,在

INSERT @table VALUES(1),(2),(1),(4), (2), (3)

我会得到结果4(因为4是最高的)。

解决方案?将“distinct”放在子查询中,如下所示:

SELECT     
    @result = @result 
        + CAST( Id AS VARCHAR(10)) + ','
FROM
    (SELECT DISTINCT id
     FROM @table) Q

导致:1,2,3,4,