"concaténer" plusieurs lignes dans un seul champ

Signaler
Messages postés
4
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
9 janvier 2009
-
Messages postés
4
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
9 janvier 2009
-
Salut, j’ai un problème SQL que je n'arrive pas à résoudre.



<?XML:NAMESPACE PREFIX = O /??>
 








J’ai une table contenant les informations de plans numérisés avec plusieurs colonnes remplies de valeurs codées.







Je me suis créé une vue qui contient les informations de ma table, avec toutes les valeurs codées remplacées par leurs valeurs vraies se trouvant dans les tables autour.







Dans une de mes tables à coté de la principale, j’ai 2 colonnes : une qui contient le numéro de plan (c’est la colonne que j’utilise pour faire le join avec la table principale), et l’autre qui contient le secteur dans lequel se trouve le plan.







Le problème, c’est que certains plans touchent à plusieurs secteurs.  Le logiciel qui est utilisé pour saisir les fiches des plans va aller créer plusieurs enregistrements. Par exemple, si j’ai le plan 0075 qui touche aux secteurs CAP, TR et TRO, je vais avoir dans ma table 3 enregistrements







0075 | CAP







0075 | TR







0075 | TRO







Cela fait que dans la vue, une fois le join créé, dans ma liste de plans, lorsque j’arrive au 0075, dans la colonne secteur, j’aurai une seule valeur contenue, par exemple CAP. 


Cela fait que je perds les 2 autres valeurs. Ca donne quelque chose du genre :







         Table secteur                                                                                      VUE







NO_PLAN         NO_SECTEUR                                                 NO_PLAN         SECTEUR







0074                            TR                                                       0074                         TR







0075                            CAP                                                    0075                         CAP







0075                            TR                                                       0076                         TRO







0075                            TRO







0076                            TRO







Je cherche donc un moyen pour que dans ma vue, dans la colonne secteur, je puisse avoir plusieurs valeurs.  J’ai pensé faire une fonction Concaténer, mais cela fonctionne bien lorsque je veux rassembler les données de plusieurs colonnes en une seule.







Dans mon cas, je veux rassembler plusieurs champs d’une même colonne dans un seul champ pour que ca donne quelque chose du genre







         Table secteur                                                                                      VUE







NO_PLAN         NO_SECTEUR                                                 NO_PLAN         SECTEUR







0074                            TR                                                       0074                            TR







0075                            CAP                                                    0075                 CAP – TR – TRO







0075                            TR                                                       0076                            TRO







0075                            TRO







0076                            TRO








 








Alors, y a-t-il une façon, dans ma requête SQL, pour faire un genre de contaténer de plusieurs champs, qui ont une valeur commune, à l’intérieur d’un seul champ dans la vue?



Merci

-djobert-
A voir également:

2 réponses

Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Salut, c'est bizarre que tu perdes les autres enregistrements...
Qu'est ce que tu fais dans ta vue?
Un group by???

Peux tu mettre la requête de ta vue, s'il te plaît, ce n'est pas normal que tu perdes les enregistrements comme ceci.
Messages postés
4
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
9 janvier 2009

Présentement, je perd les enregistrements un peu par exprès. Le problème est justement là, je ne dois pas avoir d'information qui s'ajoute. Je vais te faire un topo rapide.

SELECT     Plans_1.NO_PLAN, Plans_1.date_numerisation, Plans_1.no_projet_ref, Plans_1.titre, Plans_1.sous_titre, Plans_1.plan_prepare_par,
                      Plans_1.date_plan, Plans_1.date_inconnue, Plans_1.date_approx, Plans_1.echelle_h_ingenierie, Plans_1.echelle_h_metrique,
                      Plans_1.echelle_h_ratio, Plans_1.echelle_v_ingenierie, Plans_1.echelle_v_metrique, Plans_1.echelle_v_ratio, Plans_1.commentaires,
                      Plans_1.no_plan_voute, Types_1.nom_type, Unite_1.nom_unite, Medias_1.nom_media, Etats_1.nom_etat, Categorie_1.nom_categorie,
                      Emissions_1.nom_emission, Ratios_1.nom_ratio, PlanSecteur_1.secteur
FROM         swhvsql01.ServicesTechniques.dbo.Categorie_type AS Categorie_1 RIGHT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.Types AS Types_1 ON Categorie_1.NO_CATEGORIE_TYPE = Types_1.no_categorie RIGHT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.Plans AS Plans_1 ON Types_1.NO_TYPE = Plans_1.no_type LEFT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.Unite_mesure AS Unite_1 ON Plans_1.echelle_unite = Unite_1.NO_UNITE LEFT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.Medias AS Medias_1 ON Plans_1.no_media = Medias_1.NO_MEDIA LEFT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.Emissions AS Emissions_1 ON Plans_1.no_emission = Emissions_1.NO_EMISSION LEFT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.Etats AS Etats_1 ON Plans_1.no_etat = Etats_1.NO_ETAT LEFT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.Ratios AS Ratios_1 ON Plans_1.echelle_h_no_ratio = Ratios_1.NO_RATIO LEFT OUTER JOIN
                      swhvsql01.ServicesTechniques.dbo.PlanSecteur AS PlanSecteur_1 ON Plans_1.NO_PLAN = PlanSecteur_1.NO_PLAN

Voila ma super requête.  J'ai la table Plans qui contient toutes mes informations sous formes de valeurs codées, et j'ai toutes les autres tables autour qui contiennent les vraies valeurs. J'ai donc créé ma vue pour obtenir la table Plans avec les valeurs codées remplacées par les vraies valeurs.

Dans ma table Plans, j'ai la colonne NO_PLAN, qui contient les numéros identifiants des plans. Chaque numéro doit être unique. Le problème se situe au niveau du join pour le secteur. Présentement, le join pointe vers la table PlanSecteur, mais c'est une table de remplacement, c'est pour celà que je perd mes enregistrements.  Normalement, je pointe vers une table qui s'appel Secteur. Un même plan peut couvrir plusieurs secteurs. Donc, dans la table Secteur, j'aurai, comme dans mon exemple, 3 enregistrements qui contiennent le même NO_PLAN, avec 3 Secteurs différents. Si je fais mon join vers cette table en utilisant le NO_PLAN comme champ commun, dans ma vue, je me trouve maintenant avec 3 enregistrements qui ont le même NO_PLAN et des secteurs différents. Cela ne respecte pas le but de la vue qui est d'avoir 1 seul enregistrement par NO_PLAN.

De là provient mon besoin de prendre les 3 enregistrements de la table Secteur qui ont un NO_PLAN identique, et d'aller regrouper les 3 secteurs dans le champ secteur de l'enregistrement unique dans ma vue., pour ne pas avoir d'enregistrements ajoutés et de NO_PLANS dupliqués.

Est-ce que mon problème est plus clair comme ca?

-djobert-