Mam prostą tabelę jednej kolumny z dwiema wartościami. Wybieram go i łączę wartości z różnymi modyfikatorami, ale to po prostu dostaje ostatnią wartość. Czy jestem w nieporozumieniu z DISTINCT?Łączenie wartości kolumn z odrębnymi uzyskuje dziwny wynik
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?
Właściwie jest interesujące. Nigdy się nad tym nie zastanawiałem, ale wydaje się, że jest to różnica w 'GROUP BY' vs' DISTINCT'. Plan wykonania zmienia kolejność, w jakiej oblicza wartość zmiennej ... – ZLK
Dziękuję, wiem, że operator konkatenacji działa jako funkcja agregująca, ale dlaczego łączy operatora z Distinct act jako Max()? – Mohammadreza
Twoje przepisanie wciąż zależy od zachowania, które zależy od planu wykonania i nie jest gwarantowane. Jedynym bezpiecznym sposobem jest użycie innej metody, takiej jak 'ścieżka xml'. –