2017-09-06 4 views
-1

J'ai 4 colonne dans une table appelée RelationRecordComment concaténer une chaîne dans mon cas en utilisant SQL Server?

RelationRecord

Parent Child1 Child2 Child3 
------------------------------------ 
111  111  null  111 
222  null  null  null 
null  333  null  null 
null  null  null  444 
555  555  555  555 

je veut faire concaténer et séparés par des virgules comme ci-dessous

attendant la sortie

111,111 
222 
333 
444 
555,555,555,555 

J'ai essayé d'utiliser case et isnull mais cela ne fonctionne pas. Quand j'utilise le cas, la requête va devenir beaucoup. Y a-t-il une solution alternative?

Répondre

3

Voici une méthode:

select stuff((coalesce(',' + child1, '') + 
       coalesce(',' + child2, '') + 
       coalesce(',' + child3, '') + 
       coalesce(',' + child4, '') 
      ), 1, 1, '' 
      ) 

Le stuff() est utilisé pour supprimer la virgule avant (le cas échéant) dans la colonne de résultats.

+0

qu'est-ce que «1,1»? –

+0

@mohamedfaiz. . . arguments à 'stuff()'. –

+0

ça marche. S'il vous plaît donnez-moi la définition de 'coalesce' aussi s'il vous plaît .. Je vais accepter la réponse après 8 min. Merci –

0

je ne suis pas fier, mais le tour est joué

select 
isnull(cast(Parent as varchar(19)),'') + 
case 
    when Parent is null then '' 
    when Child1 is null then '' 
    else ',' end + 
isnull(cast(Child1 as varchar(59)),'') + 
case 
    when Child1 is null then '' 
    when Child2 is null then '' 
    else ',' end + 
isnull(cast(Child2 as varchar(59)),'') + 
case 
    when Child2 is null then '' 
    when Child3 is null then '' 
    else ',' end + 
isnull(cast(Child3 as varchar(59)),'')from Table_1 
1

Si 2012+, une autre option est concat()

Exemple

Select NewValue = IsNull(stuff(concat(','+Child1 
             ,','+Child2 
             ,','+Child3 
             ),1,1,''),Parent) 
From YourTable 

Retours

NewValue 
111,111 
222   -- Notice Parent is displayed 
333 
444 
555,555,555