Ich habe eine einfache Spalte Tabelle mit zwei Werten. Ich wähle es aus und verknüpfe Werte mit unterschiedlichen Modifikatoren, aber es erhält nur den neuesten Wert. Habe ich ein Missverständnis mit DISTINCT?Verkettung von Spaltenwerten mit distinct bekommt seltsames Ergebnis
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?
Dies ist eigentlich interessant. Ich habe mich nie damit befasst, aber das scheint ein Unterschied in "GROUP BY" gegenüber "DISTINCT" zu sein. Der Ausführungsplan ändert die Reihenfolge, in der er den Variablenwert berechnet ... – ZLK
Vielen Dank, ich weiß, verketten Operator + agieren als Aggregatfunktion, aber warum verketten Operator mit Distinct als Max()? – Mohammadreza
Ihr Umschreiben basiert immer noch auf einem Verhalten, das vom Ausführungsplan abhängig und nicht garantiert ist. Der einzige sichere Weg ist die Verwendung einer anderen Methode wie 'xml path'. –