IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

"concaténer" plusieurs lignes dans un seul champ


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut "concaténer" plusieurs lignes dans un seul champ
    Salut, j'ai un problème SQL que je n'arrive pas à résoudre.

    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

    NO_PLAN | NO_SECTEUR

    0074 | TR
    0075 | CAP
    0075 | TR
    0075 | TRO
    0076 | TRO


    VUE

    NO_PLAN | SECTEUR
    0074 | TR
    0075 | CAP
    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
    NO_PLAN | NO_SECTEUR

    0074 | TR
    0075 | CAP
    0075 | TR
    0075 | TRO
    0076 | TRO


    VUE

    NO_PLAN | SECTEUR

    0074 | TR
    0075 | CAP - TR - 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-

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Quel est votre SGBD et sa version ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    Je fonctionne avec Microsoft SQL Server 2005, sur Windows server 2003 entreprise

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    voilà mon problème un peu mieux expliqué... avec la requête

    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    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.

Discussions similaires

  1. Mettre le contenu de plusieurs lignes dans une seule case
    Par bellamouna dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 09/12/2008, 12h11
  2. Réponses: 4
    Dernier message: 26/12/2007, 22h59
  3. Plusieurs lignes dans une seule
    Par rlnd23 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2007, 16h35
  4. Réponses: 1
    Dernier message: 26/04/2006, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo