Dans le cadre d’une extraction de données sous Microsoft SQL Server, j’ai du concaténer différentes lignes ayant le même identifiant afin de les regrouper en une seule. Je m’explique…

J’ai une table familles avec des codes clients uniques (champ accountnumber), dans cette table les clients ont une ou plusieurs familles (champ value) pour les identifier (réparties donc sur une ou plusieurs lignes). Le but de cette extraction est d’obtenir toutes les familles clients sur une seule ligne et séparées par des points virgules.

SELECT accountnumber,
        (SELECT STUFF
            ((SELECT ';' + value FROM familles t1 WHERE t1.accountnumber = t2.accountnumber FOR XML PATH('')), 1, 1, '')) 
            AS familles FROM familles t2
WHERE accountnumber IS NOT NULL
GROUP BY accountnumber

A noter que les points virgules n’apparaissent qu’entre 2 familles et uniquement s’il y en a plusieurs !

Close