2012-06-03 18 views
5

Powiel możliwe:
Concatenate many rows into a single text string?Wybierz wiele wierszy SQL w jednym rzędzie

Załóżmy, że mam tabeli o nazwie tblContractMail. Przykładowa tabela z danymi podane poniżej:

enter image description here

muszę napisać zapytanie SQL, która produkuje następujące dane wyjściowe:

[email protected]; [email protected]; HJK @ akij.net”

znam dwie możliwości:

DECLARE @str varchar(4000) 
SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail 
SELECT @str 

oraz:

DECLARE @str varchar(4000) 
SET @str = (SELECT strContract + ';' FROM tblContractMail FOR XML PATH('')) 
SET @str = SUBSTRING(@str, 1, LEN(@str)-1) 
SELECT @str 

Czy istnieje jakiś sposób, aby to wyjście w jednym zapytaniu (to znaczy z zewnątrz deklarowania żadnych zmiennych)?

+0

Skorzystaj z tego. http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string –

+0

Tak, to pytanie zostało zduplikowane kilkadziesiąt razy. –

+0

@PeterMajeed: To prawda, chociaż nigdy nie było zadawane w tej konkretnej formie. –

Odpowiedz

5

Pierwsza metoda opiera się na zmiennej, więc odpowiedź brzmi: no dla pierwszej.

ale łatwo można użyć drugiego podejścia bez zmiennej, tylko trzeba zmodyfikować ją nieco:

SELECT 
    SUBSTRING(
    (SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')), 
    2, 
    2147483647 
) 

Jak widać, separator idzie przed elementu. W rezultacie zaczniesz wycinać ciąg znaków z drugiego znaku, pomijając pierwszy średnik. Specyfikator długości nie musi być dokładnie długością minus jeden, można podać dowolną dużą liczbę, a funkcja zwróci wszystko od drugiego znaku do końca. W tym przypadku określono maksymalną wartość int.

+0

Witam @Andriy dzięki – yeasir007

Powiązane problemy