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 :

Faire un Select particulier


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut Faire un Select particulier
    Bonsoir,

    Je voudrais faire un select un peu particulier.
    Immaginons que j'ai une table comme ceci

    [CODE]
    CREATE TABLE TABLE_1
    (
    idT1 number(10, 0) primary key,
    nom varchar2(100) not null,
    prenom varchar2(100) not null,
    ...
    );
    [CODE]

    J'ai une seconde table qui a une clé étrangère vers la Table_1 comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE TABLE_2 
    (
       ...
       idT1 number(10, 0), 
       ...
       typetel varchar2(20),
       numtel varchar2(20)
    ...  
       CONSTRAINT FK_1 FOREIGN KEY (idT1) REFERENCES Table_1
    );

    Je peux avoir plusieurs enregistrements dans la Table_2 ayant le même idT1.

    Supposons que j'ai le set de données suivant:


    Table_1
    idT1; nom; prénom
    001; Gates; Bill

    Table_2
    idT1; typeTel; numTel
    001; GSM; 00123456794650
    001; FIXE; 00132465797407
    001; FAX; 00023246406540


    J'aimerai faire un Select qui renvoi un résultat comme ceci (tout dans un seul enregistrement):
    ____________
    001; Gates; Bill; GSM - 00123456794650
    FIXE - 00132465797407
    FAX - 00023246406540
    ____________


    Concaténer directement deux colonnes et en même temps récupérer toute l'information de Table_2 dans un seul enregistrement. Je sais le faire en passant par des procédure stockée mais je crois que c'est possible avec BULK COLLECT mais je vois pas du tout comment cette option fonctionne.


    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    J'ai mal expliqué ?

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Non, c'est plutôt rows into column

    Y'a eu pas mal de sujets là dessus.
    Recherche pivot ou ligne en colonne

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    C'est ni rows into column ni columns into rows que je veux faire.

    Je veux faire une concaténation de plusieurs colonnes et de plusieurs enregistrements enfants pour un seul enregistrement parent.

    J'ai déjà cherché Google mais j'ai rien trouvé.


    Bonsoir à vous

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Quelle est ta version ????

    Si tu as la version 10g, tu trouveras ci-dessous une solution avec model.

    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
     
    SELECT    IDT1,NOM ,PRENOM , SUBSTR(STRING ,4)
    FROM ( SELECT T1.IDT1,T1.NOM,T1.PRENOM, T2.TYPETEL, T2.NUMTEL  , 
                  ROW_NUMBER() OVER (PARTITION BY T1.IDT1,T1.NOM, T1.PRENOM ORDER BY  T2.TYPETEL DESC ) N 
    	   FROM TABLE_1 T1,TABLE_2 T2
           WHERE T1.IDT1=T2.IDT1
         ) T
    MODEL
    RETURN UPDATED ROWS
    PARTITION BY ( IDT1,NOM, PRENOM )
    DIMENSION BY ( N AS POSITION )
    MEASURES ( CAST( TYPETEL||','||NUMTEL AS VARCHAR2(4000) ) AS STRING)
    RULES
    UPSERT
    ITERATE( 100 )
    UNTIL ( PRESENTV(STRING[ITERATION_NUMBER+2],1,0) = 0 )
    ( STRING[0] =  STRING[0] || ' - ' ||STRING[ITERATION_NUMBER+1] )
    Le résultat
    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
     
    SQL> /
     
    IDT1  NOM
    ----- --------------------------------------------------
    PRENOM
    --------------------------------------------------
    STRING
    --------------------------------------------------------------------------------
    001   Gates
    Bill
    HHH,00213888888888 - GSM,00123456794650 - FIXE,00132465797407 - FAX,000232464065
    40
     
    002   CHELABI
    SALIM
     
    IDT1  NOM
    ----- --------------------------------------------------
    PRENOM
    --------------------------------------------------
    STRING
    --------------------------------------------------------------------------------
    GSM,00213999999999 - FIXE,00213215625230 - FAX,00213555555555

  7. #7
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par central.jaco Voir le message
    C'est ni rows into column ni columns into rows que je veux faire.

    Je veux faire une concaténation de plusieurs colonnes et de plusieurs enregistrements enfants pour un seul enregistrement parent.

    ...
    MCM a raison je me suis trompé.

    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
     
    SQL> r
      1  With T1 As
      2  (
      3    Select '001' id, 'Gates' nom,  'Bill' prenom From dual
      4  ),
      5  T2 As
      6  (
      7    Select '001' id, 'GSM' typeTel,  '00123456794650' numTel From dual Union ALL
      8    Select '001' id, 'FIXE' typeTel, '00132465797407' numTel From dual Union ALL
      9    Select '001' id, 'FAX' typeTel,  '00023246406540' numTel From dual
     10  )
     11  Select t1.id||';'||nom||';'||prenom||';'||Stragg(typetel||'-'||numtel)
     12    From T1, T2
     13   Where t1.id = t2.id
     14*  Group By t1.id||';'||nom||';'||prenom||';'
     
    T1.ID||';'||NOM||';'||PRENOM||';'||STRAGG(TYPETEL||'-'||NUMTEL)
    --------------------------------------------------------------------------------
    001;Gates;Bill;GSM-00123456794650,FIXE-00132465797407,FAX-00023246406540

Discussions similaires

  1. [SELECT] Faire un select avec des champs vides
    Par MinsK dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/08/2005, 00h05
  2. Faire un select sur une quantité défini d'élément
    Par tripper.dim dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2005, 11h14
  3. Faire un Select v1 sans mettre v1 dans Group By
    Par faayy dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/05/2005, 09h28
  4. Select particulier .
    Par hamed dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/11/2003, 15h45
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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