Конкатенация значений столбцов с отдельными получает странный результат
У меня есть простая таблица с двумя значениями. Я выбираю его и объединяю значения с отдельным модификатором, но он просто получает последнее значение. Неужели я ошибаюсь в 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?
- SQL concat select count и varchar
- Как я могу заказать запрос по доменам адресов электронной почты?
- SQL Server: группировка по конкатенации строк
- Объединить значения строк T-SQL
- SQL - Объединение значений, когда количество элементов неизвестно
- Как программно конкатенать данные в столбцы SQL Server для соответствия max_value?
- SQL Server: сравнение конкатенированных столбцов для обеспечения равномерности неупорядоченного набора
- Могу ли я заказать результаты конкатенации в tsql?
- ORDER BY внезапно конфликтует с конкатенацией VARCHAR в TSQL
- SQL, Как объединить результаты?
- Как конкатенировать строку и GETDATE () в MSSQL
- Как объединить различные значения столбцов из строк с дублирующимися идентификаторами в одну строку?
- T-SQL конкатенация VarChar с запятой
Быстрый просмотр плана выполнения (и некоторых игр) показал мне, что SELECT DISTINCT также сортируется, и поэтому вы получаете максимальный id.
Например, в
INSERT @table VALUES(1),(2),(1),(4), (2), (3)
Я бы получил результат 4 (потому что 4 – самый высокий).
Решение? Поместите «отчетливый» в дополнительный запрос следующим образом:
SELECT @result = @result + CAST( Id AS VARCHAR(10)) + ',' FROM (SELECT DISTINCT id FROM @table) Q
В результате: 1, 2, 3, 4,