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.