5
İki değer içeren basit bir sütun tablom var. Onu seçer ve farklı modifiye edici ile değerleri birleştiririm ancak en son değeri alır. DISTINCT ile yanlış anlaşıldım mı?Sütun değerlerini ayrı ayrı birleştirmek tuhaf bir sonuç alır
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?
Bu aslında ilginç:
ile sonuçlanan. Hiç bakmadım ama bu “GROUP BY” ile “DISTINCT” arasında bir fark gibi görünüyor. Yürütme planı, değişken değerini hesapladığı sırayı değiştirir ... – ZLK
Teşekkür ederim, Operatörü birleştir + topla işlevi olarak hareket etmeyi biliyorum, ancak neden Max()? – Mohammadreza
Yeniden yazmanız hala yürütme planı bağımlı ve garanti edilmeyen davranışlara dayanır. Tek güvenli yol, xml yolu gibi başka bir yöntemi kullanmaktır. –