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

Oracle Discussion :

Vérification requête SQL


Sujet :

Oracle

  1. #21
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Points : 22
    Points
    22
    Par défaut
    Je viens de lire le cours sur les jointures, et j'ai effectivement eu ma réponse.
    Par contre, je rencontre un probème assez génant, j'ai aussi des doublons, comme si la jointure n'est pas totalement faite.

    Voici ma requête:

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    SELECT  
            p.tel_perso_per,
    	a.adr_rue,
    	a.adr_num,
    	a.adr_cp,
    	a.adr_ville,
     
    	m.id_fam_rep1,
    	m.situation_per,
    	m.nom_per,
    	m.prenom_per,
    	m.email_perso_per,
    	m.tel_portable_per,
    	m.adr_num_per,
    	m.adr_rue_per,
    	m.adr_cp_per,
    	m.adr_ville_per,
    	m.profession_per,
    	m.id_fam_rep2,
    	m.nom_per,
    	m.prenom_per,
    	p.id_per,
            p.sexe_per,
            p.nom_per,
            p.prenom_per,
            p.date_naissance_per,
            il.code_lie,
            il.nom_lie,
            '#Date début de période ../../....#' date_debut,
            '#Date fin de période ../../....#' date_fin,
            COUNT(DISTINCT date_rsv) nb_jours
    FROM    cr_inscription  i
        INNER JOIN
            cr_famille      f
            ON  i.id_fam = f.id_fam
        INNER JOIN
            cr_personne     p
            ON  i.id_per_ins = p.id_per
        INNER JOIN
            cr_inscription_lieu     il
            ON  i.id_ins = il.id_ins
        INNER JOIN
    	cr_adresse	a
    	ON f.id_adr = a.id_adr
        INNER JOIN
    	cr_membre_famille	m
    	ON f.id_fam = m.id_fam
        INNER JOIN
            cr_inscription_presence ip
            ON  i.id_ins = ip.id_ins
     
     
    WHERE   -- Restrcition sur la période
            ip.date_rsv >= to_number(to_char(to_date('#Date début de période ../../....#'),'YYYYMMDD'))
        AND ip.date_rsv <= to_number(to_char(to_date('#Date fin de période ../../....#'),'YYYYMMDD'))
        AND LOWER(il.code_lie) = lower('#Libellé court du lieu :#')
            --Que les présences
        AND ip.type_heure_rsv = 'P'
    GROUP BY
     
            p.tel_perso_per,
    	a.adr_rue,
    	a.adr_num,
    	a.adr_cp,
    	a.adr_ville,
    	m.id_fam_rep1,
    	m.situation_per,
    	m.nom_per,
    	m.prenom_per,
    	m.email_perso_per,
    	m.tel_portable_per,
    	m.adr_num_per,
    	m.adr_rue_per,
    	m.adr_cp_per,
    	m.adr_ville_per,
    	m.profession_per,
    	m.id_fam_rep2,
    	m.nom_per,
    	m.prenom_per,
    	p.id_per,
            p.sexe_per,
            p.nom_per,
            p.prenom_per,
            p.date_naissance_per,
            il.code_lie,
            il.nom_lie

  2. #22
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Points : 22
    Points
    22
    Par défaut
    Up !!!

    Je voudrais donc croiser 2 tables, cr_personne et cr_membre_famille.
    Mais je les ai déja mises dans un inner join chacune.
    Via ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INNER JOIN
            cr_personne     p
            ON  m.id_per_ins = p.id_per
    INNER JOIN
    	cr_membre_famille	m
    	ON f.id_fam = m.id_fam
    Or, vu que je ne peut pas, mettre deux fois "ON" dans un inner join, et que je ne peut pas déclarer la table une deuxième fois via un inner join, donc comment faire pour croiser ces 2 tables ?

  3. #23
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous ne mettez qu'un ON, mais vous pouvez mettre plusieurs conditions, un peu comme pour un WHERE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    INNER JOIN B
        ON [condition1]
        AND [condition2]
        OR [condition3]
     ...

  4. #24
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Désolé du temps d'attente, mais j'étais en congé.
    En tout cas, je tenais vraiment à remercier toutes les personnes qui m'ont aidé ici, c'est très gentil de votre part.

    Mais j'ai une autre question maintenant. Voici la nouvelle requête:

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    SELECT  
    	f.id_fam,
    	a.adr_rue,
    	a.adr_num,
    	a.adr_cp,
    	a.adr_ville,
    	m.role_per,
    	m.situation_per,
    	m.prenom_per,
    	m.nom_per,
    	m.sexe_per,
    	m.email_perso_per,
    	m.tel_perso_per,
    	m.tel_portable_per,
    	m.profession_per,
            m.date2_naissance_per,
            il.code_lie,
            il.nom_lie,
    	f.numero_alloc_fam,
    	f.nb_enfant_fam,
    	i.date2_debut_ins,
    	i.etat_ins,
            '#Date début de période ../../....#' date_debut,
            '#Date fin de période ../../....#' date_fin,
            COUNT(DISTINCT date_rsv) nb_jours
    FROM    cr_inscription  i
        INNER JOIN
            cr_famille      f
            ON  i.id_fam = f.id_fam
        INNER JOIN
            cr_personne     p
            ON  i.id_per_ins = p.id_per
        INNER JOIN
            cr_inscription_lieu     il
            ON  i.id_ins = il.id_ins
        INNER JOIN
    	cr_adresse	a
    	ON f.id_adr = a.id_adr
        INNER JOIN
    	cr_membre_famille	m
    	ON f.id_fam = m.id_fam
        INNER JOIN
            cr_inscription_presence ip
            ON  i.id_ins = ip.id_ins
        INNER JOIN
    	cr_famille_contact	fc
    	ON f.id_fam = fc.id_fam
     
     
    WHERE   -- Restrcition sur la période
            ip.date_rsv >= to_number(to_char(to_date('#Date début de période ../../....#'),'YYYYMMDD'))
        AND ip.date_rsv <= to_number(to_char(to_date('#Date fin de période ../../....#'),'YYYYMMDD'))
        AND LOWER(il.code_lie) = lower('#Libellé court du lieu :#')
            --Que les présences
        AND ip.type_heure_rsv = 'P'
    GROUP BY
     
            f.id_fam,
    	a.adr_rue,
    	a.adr_num,
    	a.adr_cp,
    	a.adr_ville,
    	m.role_per,
    	m.situation_per,
    	m.prenom_per,
    	m.nom_per,
    	m.sexe_per,
    	m.email_perso_per,
    	m.tel_perso_per,
    	m.tel_portable_per,
    	m.profession_per,
            m.date2_naissance_per,
            il.code_lie,
            il.nom_lie,
    	f.numero_alloc_fam,
    	f.nb_enfant_fam,
    	i.date2_debut_ins,
    	i.etat_ins
    Je voudrais, que le champ "date2_debut_ins" ne soit rempli que dans le cas où "role_per" est égal à 'E'. Pour cela, je met une clause where role_per = 'E', mais dans ce cas là, ça s'applique à toute ma requête, or je voudrais que cette condition ne s'applique que pour le champ "date2_debut_ins".
    Comment faire ?

  5. #25
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez pour cela utiliser un CASE. Dans la partie SELECT, remplacez la colonne par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CASE WHEN role_per = 'E' THEN i.date2_debut_ins END as date2_debut_ins,
    Dans le résultat, cette colonne sera à NULL si role_per est différent de 'E'

  6. #26
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Points : 22
    Points
    22
    Par défaut
    Alors la, merci beaucoup l'ami.

    Mais j'ai encore un petit souci, une fois ceci fait, dans la collone "date2_debut_ins", j'ai la même date pour chaque personne, alors que je devrais voir pourtant une date différente.

Discussions similaires

  1. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  2. [VS2005]Vérification de la syntaxe d'une requête SQL
    Par gassisprog dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/04/2008, 08h45
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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