Ponieważ ostatnio często w moim otoczeniu pojawiało się pytanie „Jak skleić wartości z jednej kolumny w ciąg znaków oddzielonych przecinkami” postanowiłem przedstawić jedną z najszybszych metod na zrealizowanie tego zadania (oczywiście nie jest ona pozbawiona wad):
DECLARE @Out VARCHAR(XXXX) SELECT @Out = COALESCE(@Out+',','')+[column] FROM [table] SELECT @Out
A oto mały przykład pokazujący działanie tego zapytania
CREATE TABLE Strings
(
[String] VARCHAR(1000)
,[String2] VARCHAR(1000)
,[Int] INT
)
INSERT INTO Strings ([String],[String2],[Int]) VALUES('a','a2',1)
INSERT INTO Strings ([String],[String2],[Int]) VALUES('b','b2',2)
INSERT INTO Strings ([String],[String2],[Int]) VALUES('c','c2',3)
INSERT INTO Strings ([String],[String2],[Int]) VALUES('d','d2',4)
DECLARE @Out VARCHAR(4000)
SELECT @Out = COALESCE(@Out+',','')+[String]+'['+[String2]+']-'+CONVERT(VARCHAR,[Int])
FROM [Strings]
SELECT @Out
DROP TABLE [Strings]
Rozwiązanie działa na pewno na wersjach SQL Server 2000, 2005 i 2008. Oczywiście istnieje jeszcze wiele innych metod wykonania tego zadania ale ta wydaje się być najprostszą z nich.
Wrzesień 21st, 2009 on 6:52 pm
ten sposob jest dobry ale tylko juz dla MSSQL 2000. Dla 2005 i wyzej o wiele lepszy i rownie prosty jest ten: http://weblogs.sqlteam.com/mladenp/archive/2007/06/01/60220.aspx
Październik 1st, 2009 on 10:19 pm
W przypadku SQL Server 2005 i 2008 jest jeszcze kilka innych metod na osiągnięcie tego samego wyniku, to prawda. Plusem mojego rozwiązania jest to, że działa na wszystkich wersjach SQL Servera.