2017-07-07 5 views
0
DECLARE @mockup TABLE(Column1 VARCHAR(1),Column2 VARCHAR(1)); 
INSERT INTO @mockup VALUES('1','2'),('-','2'),('1','2'),('-','-'),('2','-'),('1','2'); 

SELECT ISNULL(NULLIF(Column1 + '|','-|'),'') 
     +ISNULL(NULLIF(Column2,'-'),'') 
FROM @mockup 

Above Abfrageergebnis ist als unten,Werte von 2 Spalten als Einzelwert erhalten, getrennt durch '|'

1|2 
2 
1|2 
2| 
1|2 

ich das Ergebnis wollen, wie oben nur mit Ausnahme row4, wobei 2 | sollte nur so 2 sein. '|' sollte nicht vor oder am Ende der Werte sein.

Antwort

0

einfach beide Felder verbinden und Verwendung REPLACE entfernen |- und -|. Zustand in WHERE Klausel vermeidet Datensätze, bei denen beide Felder sind -:

select replace(replace(Column1+'|'+Column2,'-|',''),'|-','') as Result 
from mockup 
where coalesce(nullif(Column1,'-'),nullif(Column2,'-')) is not null 

Ausgang:

Result 
1|2 
2 
1|2 
2 
1|2 

here Ergebnis.

0

Verwenden Replace Funktion

SELECT replace(replace(replace(Column1 + '|' + Column2,'-|',''),'|-',''),'-','') 
FROM @mockup 

oder versuchen Sie es mit CASE Anweisung

SELECT CASE 
     WHEN column1 LIKE '[0-9]' AND column2 LIKE '[0-9]' THEN column1 + '|' + column1 
     WHEN column1 LIKE '[0-9]' AND column2 NOT LIKE '[0-9]' THEN column1 
     ELSE column2 
     END 
FROM @mockup 

, wenn Sie die - anstelle von Zahlen überprüfen wollen, dann

SELECT CASE 
     WHEN column1 NOT LIKE '-' AND column2 NOT LIKE '-' THEN column1 + '|' + column1 
     WHEN column1 NOT LIKE '-' AND column2 LIKE '-' THEN column1 
     ELSE column2 
     END 
FROM @mockup 
0

ich tun würde dies als:

select stuff(((case when column1 not like '-' then '|' + column1 else '' end) + 
       (case when column2 not like '-' then '|' + column2 else '' end) 
      ), 1, 1, ''); 

Dies ist die einfachste Art und Weise, die ich gefunden habe concat_ws() in SQL Server zu implementieren. concat_ws() ist eine Funktion, die in anderen Datenbanken verfügbar ist, wo Sie nur tun würden:

select concat_ws('|', 
       (case when column1 not like '-' then column1 end), 
       (case when column2 not like '-' then column2 end)     
       ) 
Verwandte Themen