2016-06-06 13 views
1

Der folgende Code ist ein Ausgangspunkt zum Verketten mehrerer Spalten zu einer Zeichenfolge, wobei die Werte durch Kommas getrennt sind. Wenn der Spalt Eintrag leer oder NULL ist, sollte kein Komma verwendet werden:Verketten Sie mehrere Spalten als durch Komma getrennte Zeichenfolge

IF OBJECT_ID(N'tempdb..#Temp') IS NOT NULL 
    DROP TABLE #Temp; 

CREATE TABLE #Temp 
    (
     Id INT, 
     Name1 NVARCHAR(10) , 
     Name2 NVARCHAR(10) , 
     Name3 NVARCHAR(10) 
    ); 

INSERT INTO #Temp 
     SELECT 1, 
       N'Name1' , 
       NULL , 
       N'Name3' 
UNION 
     SELECT 2, 
       N'Name1' , 
       N'Name2' , 
       N'Name3' 
UNION 
     SELECT 3, 
       NULL , 
       NULL , 
       N'Name3' 
UNION 
     SELECT 
       4, 
       N'' , 
       N'' , 
       N'Name3'; 

SELECT Id, STUFF(COALESCE(N',' + Name1, N'') + COALESCE(N',' + Name2, N'') 
       + COALESCE(N',' + Name3, N''), 1, 1, '') AS ConcateStuff 
FROM #Temp; 

Die aktuellen Ergebnisse sind wie folgt:

Id ConcateStuff 
1 Name1,Name3 
2 Name1,Name2,Name3 
3 Name3 
4 ,,Name3 

Alles gut funktioniert für NULL-Einträge, aber nicht für leere Einträge. Das Ergebnis der letzten Zeile sollte gerade sein:

Name3 

Gibt es eine einfache Möglichkeit, dies ohne Verwendung von komplexen verschachtelten Case-Anweisungen zur Arbeit zu kommen (schließlich muß ich mehr als 3 Spalten verketten).

+0

plus 1 für Beispieldaten – TheGameiswar

Antwort

2

Mit NULLIF können Sie es erreichen.

SELECT Id, STUFF(COALESCE(N',' + NULLIF(Name1, ''), N'') + COALESCE(N',' + NULLIF(Name2, ''), N'') 
       + COALESCE(N',' + NULLIF(Name3, ''), N''), 1, 1, '') AS ConcateStuff 
FROM #Temp; 

Ergebnis

Id ConcateStuff 
----------------- 
1 Name1,Name3 
2 Name1,Name2,Name3 
3 Name3 
4 Name3 
2

SQL2012:

STUFF(CONCAT(',' + Name1, ',' + Name2, ',' + Name3), 1, 1, '') 
STUFF(CONCAT(',' + NULLIF(Name1,''), ',' + NULLIF(Name2,''), ',' + NULLIF(Name3,'')), 1, 1, '') 

SQL2005 +:

STUFF(ISNULL(','+Name1) + ISNULL(','+Name2) + ISNULL(','+Name2) , 1, 1, '') 
STUFF(ISNULL(','+NULLIF(Name1,'')) + ISNULL(','+NULLIF(Name2,'')) + ISNULL(','+NULLIF(Name1,'')) , 1, 1, '') 
Verwandte Themen