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

Moh*_*eza 5 sql t-sql sql-server 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?
Run Code Online (Sandbox Code Playgroud)

Hil*_* DG 4

快速查看执行计划(以及一些操作)表明 SELECT DISTINCT 也可以排序,因此您可以获得最大 id。

例如,在

INSERT @table VALUES(1),(2),(1),(4), (2), (3)
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT     
    @result = @result 
        + CAST( Id AS VARCHAR(10)) + ','
FROM
    (SELECT DISTINCT id
     FROM @table) Q
Run Code Online (Sandbox Code Playgroud)

结果是:1、2、3、4、