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 :

Aide pour un requête SELECT


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Par défaut Aide pour un requête SELECT
    Bonjour, bonsoir !

    Une question de novice pour vous détendre les neurones...(enfin, c'est ce que je nous souhaite)
    Pour faire simple : j'ai 2 tables "dossier" et "adresses" qui ont en commun un champ client_ID.

    Champs dans "dossier" :
    - ID (non null, numéro de dossier unique)
    - ID_client : ce champ peut être null !

    Champs dans "adresses" :
    - rue, commune, codepostal, ...
    - ID_client (non null)
    - type_adresse (non null) : F (famille) ou P (professionnelle)
    La combinaison ID_client et type_adresse est unique. Par contre, un ID_client peut-être présent plusieurs fois.

    Je veux faire une requête SELECT qui retourne pour un dossier donné UNE seule adresse du client : adresse professionnelle si il y a, sinon autre. Mais je ne sais pas comment formuler ça (pour le type d'adresse). A noter que si dossier.ID_client est null, ma requête doit quand même afficher l'enregistrement.
    L'un de vous pourrait-il m'aider avec une petit suggestion ?
    Un grand merci d'avance ! Bonne journée !
    Cécile
    Oracle 10g

  2. #2
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut select imbriqués
    Bonjour,
    Peut être que des membres experts auront une meilleur idée mais voici comment je m'y prendrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT D.ID, D.ID_client , 
    decode(P.type_adresse,'P',P.type_adresse,F.type_adresse) "RUE", 
    decode(P.type_adresse,'P',P.Rue,F.Rue) "RUE", 
    decode(P.type_adresse,'P',P.Commune,F.Commune) "COMMUNE", 
    decode(P.type_adresse,'P',P.Codepostal,F.Codepostal) "RUE", 
    FROM 
    (SELECT * FROM Adresses WHERE type_adresse = 'P') P,
    (SELECT * FROM Adresses WHERE type_adresse = 'F') F
    WHERE D.ID_client = P.ID_client(+)
    AND D.ID_client = F.ID_client(+)
    Si le client existe dans adresses avec le type P, on le ramène
    sinon on ramène le type F sachant qu'avec une jointure externe on ramène null si il n'est pas présent non plus avec le type F

    une autre méthode consisterait à faire l'UNION de 3 requêtes différenciées par l'utilisation de EXISTS et NON EXISTS
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  3. #3
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut le toujours pressé ne relit qu'après
    je me suis trompé dans nommage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div style="text-align: left;">SELECT D.ID, D.ID_client , 
    decode(P.type_adresse,'P',P.type_adresse,F.type_adresse) "TYPE ADRESSE", 
    decode(P.type_adresse,'P',P.Rue,F.Rue) "RUE", 
    decode(P.type_adresse,'P',P.Commune,F.Commune) "COMMUNE", 
    decode(P.type_adresse,'P',P.Codepostal,F.Codepostal) "CODE POSTAL", 
    FROM 
    (SELECT * FROM Adresses WHERE type_adresse = 'P') P,
    (SELECT * FROM Adresses WHERE type_adresse = 'F') F
    WHERE D.ID_client = P.ID_client(+)
    AND D.ID_client = F.ID_client(+) </div>
    Désolé
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Une autre possibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT D.Id,
        D.Id_Client,
        NVL((SELECT Rue FROM Adresses WHERE Id_Client = D.Id_Client AND type_adresse = 'P'), (SELECT Rue FROM Adresses WHERE Id_Client = D.Id_Client AND type_adresse = 'F')) Rue,
        NVL((SELECT Commune FROM Adresses WHERE Id_Client = D.Id_Client AND type_adresse = 'P'), (SELECT Commune FROM Adresses WHERE Id_Client = D.Id_Client AND type_adresse = 'F')) Commune,
        NVL((SELECT CodePostal FROM Adresses WHERE Id_Client = D.Id_Client AND type_adresse = 'P'), (SELECT CodePostal FROM Adresses WHERE Id_Client = D.Id_Client AND type_adresse = 'F')) CodePostal
    FROM Dossier D
    WHERE Id = :IdDossier;
    rbaraer

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Par défaut
    Un grand merci pour votre aide précieuse ! J'ai adapté vos suggestions à ma vraie DB et ça roule comme je le veux !
    Bonne journée !
    Cécile

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

Discussions similaires

  1. Aide pour une requête et left join
    Par Lolo19 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/08/2005, 08h09
  2. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  3. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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