Un script SQL bien utile trouvé sur le site de "Have you any wool?" qui permet de transformer en lignes des données se trouvant dans une colonne.
ici le script :
Declare @CDTable TABLE ( [Base] varchar(10) NOT NULL, [Region] varchar(10) NOT NULL, [Centre] varchar(10) NOT NULL, [Secteur] varchar(5) NOT NULL, [Client] varchar(10) NOT NULL ) INSERT @CDTable SELECT 'BASE01','IDFrance' ,'Paris' ,'75010','Client 1' Union ALL SELECT 'BASE01','IDFrance' ,'Versailles','78000','Client 2' Union ALL SELECT 'BASE02','OUEST' ,'Rennes' ,'35000','Client 3' Union ALL SELECT 'BASE02','OUEST' ,'Brest' ,'29200','Client 4' Union ALL SELECT 'BASE03','SUD-OUEST','Pauilhac' ,'32500','Client 5' Union ALL SELECT 'BASE03','SUD-OUEST','Toulouse' ,'31000','Client 6' Union ALL SELECT 'BASE03','SUD-OUEST','Bordeaux' ,'33000','Client 7' SELECT DISTINCT [Region], [Base], (Stuff((SELECT ',' + Centre FROM @CDTable T2 WHERE T2.Base = T1.Base AND T2.Region = T2.Region FOR XML PATH('')),1,1,'')) AS Centre, (Stuff((SELECT ',' + Secteur FROM @CDTable T2 WHERE T2.Base = T1.Base AND T2.Region = T2.Region FOR XML PATH('')),1,1,'')) AS Secteur, (Stuff((SELECT ',' + Client FROM @CDTable T2 WHERE T2.Base = T1.Base AND T2.Region = T2.Region FOR XML PATH('')),1,1,'')) AS Client FROM @CDTable T1 ORDER BY [Base]
On passe de données dans ce format
| Base | Region | Centre | Secteur | Client |
| BASE01 | IDFrance | Paris | 75010 | Client 1 |
| BASE01 | IDFrance | Versailles | 78000 | Client 2 |
| BASE02 | OUEST | Rennes | 35000 | Client 3 |
| BASE02 | OUEST | Brest | 29200 | Client 4 |
| BASE03 | SUD-OUEST | Pauilhac | 32500 | Client 5 |
| BASE03 | SUD-OUEST | Toulouse | 31000 | Client 6 |
| BASE03 | SUD-OUEST | Bordeaux | 33000 | Client 7 |
à ce format !!
| Base | Region | Centre | Secteur | Client |
| BASE01 | IDFrance | Paris,Versailles | 75010,78000 | Client 1,Client 2 |
| BASE02 | OUEST | Rennes,Brest | 35000,29200 | Client 3,Client 4 |
| BASE03 | SUD-OUEST | Pauilhac,Toulouse,Bordeaux | 32500,31000,33000 | Client 5,Client 6,Client 7 |
la fonction Stuff permet d'insérer une chaîne dans une autre chaîne. Elle efface d'abord le nombre de caractères spécifié dans la première chaîne à partir de la position de début. Ensuite, elle insère la seconde chaîne dans la première à partir de la position de début.

2 commentaires reçu(s)
Laisser une réponse