我有一个简单的一列表,有两个值。我选择它并使用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?
答案 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,