2009-05-04 10 views

Odpowiedz

5

można łączyć za pomocą wbudowanego 'Ustaw' oświadczenie w zapytaniu:

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + isnull(value,'') 
from simpleTable 

print @combined

(Zauważ, że pierwszy IsNull() inicjuje łańcuch, a drugi isnull() jest szczególnie ważny, jeśli istnieje szansa na wartości zerowe w kolumnie "wartość", ponieważ w przeciwnym razie pojedyncza wartość zerowa mogłaby wymazać całą konkatenację)

(edytowany kod i wyjaśnienie po komentarzach)

+0

słodka! Nie wiedziałem, że możesz to zrobić. Zawsze myślałem, że ustawienie i wybór działają tak samo dla zadania. –

+1

możesz chcieć, aby było "+ ISNULL (value, '')", ponieważ "+ wartość" usunie dowolną część ciągu budowanego przed wierszem o wartości pustej –

+0

masz rację! nie wiem, jak to przegapiłem ... edytowałem. – codeulike

2
DECLARE @EmployeeList varchar(100) 

SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + 
    CAST(Emp_UniqueID AS varchar(5)) 
FROM SalesCallsEmployees 
WHERE SalCal_UniqueID = 1 

SELECT @EmployeeList 

Wyniki:

1, 2, 4 
3

Będzie to działać tylko w MSSQL 2005+

select value + ',' from simpletable for xml path ('') 

..one sposobem uniknięcia dodatkowych przecinek:

select case(row_number() over (order by id)) 
when 1 then value else ',' + value end 
from simpletable 
for xml path ('') 
+0

Działa tylko w SQLServer 2005+, ale tak, to jest zabawny hack. – FlySwat

+0

gdyby tylko był sprytny sposób na usunięcie ostatniego przecinka :) – dotjoe

+0

dodał świetny sposób, aby usunąć ten ostatni przecinek :) – gordy

0

Jest to oparte na odpowiedzi @codeulike, ale zapobiega utracie części łańcucha, który zostaje połączony, zanim null "wartość" jest połączona.

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + ISNULL(value,'') 
from simpleTable 

print @combined 
Powiązane problemy