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

SQL Oracle Discussion :

Extraire multiligne vers ligne unique


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut Extraire multiligne vers ligne unique
    Bonjour à tous,

    Je débute en SQL et je suis actuellement bloqué sur une requête sans doute toute bête.
    Je voudrais extraire plusieurs lignes d'une vue et les concatener dans une seconde vue en fonction d'une colonne (ID_NOEUD) comportant des valeurs égales.
    Ceci tout simplement dans le but de faire apparaître une étiquette sur une carte.

    VUE1 :

    ID_CANA ID_NOEUD ZFE_AMONT ZFE_AVAL COTE_NOEUD
    C20294 20364 0.234 0.21 AVAL
    C20307 20365 0.223 0.199 AMONT
    C20345 20365 0.124 0.1 AMONT
    C20366 20365 0.435 0.411 AVAL
    C20367 20364 0.487 0.463 AMONT

    A partir de cet exemple je veux arriver au résultat suivant :

    VUE2 :

    ID_NOEUD TEXTE
    20364 C20294_0.221_AVAL\nC20367_0.487_AMONT
    20365 C20307_0.223_AMON\nC20345_0.124_MONT\nC20366_0.411_AVAL

    Sachant qu'en fonction de la valeur de mon champ "COTE_NOEUD" je vais choisir de remonter soit ZFE_AVAL soit ZFE_AMONT.
    Ex : si j'ai la valeur "COTE_NOEUD" = AMONT je doit remonter la valeur ZFE_AMONT

    Est-il possible d'effectuer cette opération sans passer par une procédure PL/SQL?

    Je vous remercie pour vos réponses

  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
    Oui c'est possible. Quelle est votre version d'Oracle ?

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Bonjour Waldar, Je suis en 10.2.0.1.0.

  4. #4
    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
    Essayez ainsi :
    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
    With MaVue AS
    (
    select 'C20294' as id_cana, 20364 as id_noeud, 0.234 as zfe_amont, 0.21 as zfe_aval, 'AVAL' as cote_noeud from dual union all
    select 'C20307'           , 20365            , 0.223             , 0.199           , 'AMONT'              from dual union all
    select 'C20345'           , 20365            , 0.124             , 0.1             , 'AMONT'              from dual union all
    select 'C20366'           , 20365            , 0.435             , 0.411           , 'AVAL'               from dual union all
    select 'C20367'           , 20364            , 0.487             , 0.463           , 'AMONT'              from dual
    )
      select id_noeud,
             rtrim(replace(replace(XMLAGG(XMLElement("x", id_cana || '_' ||
             to_char(case cote_noeud
               when 'AVAL'  then zfe_aval
               when 'AMONT' then zfe_amont
             end, 'fm0D999', 'nls_numeric_characters=''.,''') || '_' || cote_noeud) order by id_cana asc),
                   '<x>', ''), '</x>', '\n'), '\n') as res
        from MaVue
    group by id_noeud
    order by id_noeud asc;
     
    ID_NOEUD	RES
    20364		C20294_0.21_AVAL\nC20367_0.487_AMONT
    20365		C20307_0.223_AMONT\nC20345_0.124_AMONT\nC20366_0.411_AVAL

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Je viens de mettre en place ma nouvelle vue grâce à ton script et tout fonctionne à merveille!
    Je te remercie vivement pour ton aide

    Bonne journée

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Bonjour à tous,
    Suite à l'utilisation de la vue proposée par Waldar, je me suis rendu compte qu'il me manquait un \n à la fin de chaque ligne pour en faire une utilisation optimale.
    Étant novice en sql et malgré avoir testé plusieurs choses je n'y suis malheureusement pas arrivé ^^
    Une idée?
    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. selectionner sur excel les lignes uniques
    Par botorollo dans le forum Excel
    Réponses: 3
    Dernier message: 22/02/2007, 10h37
  2. [WD10]Chaine multiligne vers monoligne
    Par routmout dans le forum WinDev
    Réponses: 4
    Dernier message: 24/01/2007, 14h10
  3. Table à ligne unique.
    Par jarrux dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/01/2005, 19h00
  4. Multiplication ligne à ligne uniquement en SQL
    Par mehdou dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/09/2004, 16h46

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