En ligne
Nous avons 4 invités en ligne

Détails dans une colonne

Saviez-vous qu'avec T-SQL vous pouvez ramener les détails sous une même colonne.

Cela est possible en combinant FOR XML PATH et STUFF. J'en ai eu besoin l'autre jour et je vous donne le truc ici au cas ou vous voudriez l'utiliser.

Supposons que nous avons une table de province.

create table province
(
abbrev char(2),
nom varchar(30)
);

insert into province (abbrev, nom) values ('QC', 'Québec');
insert into province (abbrev, nom) values ('ON', 'Ontarion');
insert into province (abbrev, nom) values ('AB', 'Alberta');

Pour simplifier, je n'ai ajouté que trois provinces.

En utilisant la un select FOR XML PATH, vous obtenez un arbre SQL représentant le résult de la requête mais en XML.

select abbrev from province FOR XML PATH

Vous obtenez alors le résultat suivant:

'<row><abbre>QC</abbrev></row><row><abbre>ON</abbrev></row>
<row><abbre>AB</abbrev></row>'

C'est bien un arbre XML. Maintenant, on peut enlever les étiquettes "row" en ajoutant '' entre parenthèse à PATH. Voici ce que ça donne.

select abbrev from province FOR XML PATH('')

'<abbre>QC</abbrev><abbre>ON</abbrev><abbre>AB</abbrev>'

Ensuite, pour remplacer les étiquettes restantes par un autre caractère comme ',' par exemple, il suffit de l'ajouter en avant du champs comme suit:

select ',' + abbrev from province FOR XML PATH('')

',QC,ON,AB'

Il ne reste plus qu'à éliminier le premier ',' devant pour faire propre. C'est là que STUFF entre en jeu. C'est une fonction pour remplacer une chaîne de caractère par une autre.

select stuff((select ',' + abbrev from province for xml path('')), 1, 1, '')

'QC,ON,AB'

Et voilà, le tour est joué.

Mis à jour (Vendredi, 30 Juillet 2010 07:07)