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 :

Encore une jointure sous Oracle pour la route


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut Encore une jointure sous Oracle pour la route
    De la même manière que je suis (grĉe à votre aide) passé de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT num_mois, COUNT(DISTINCT date_bull) FROM mois, diff_controle WHERE num_mois=TO_CHAR(date_bull,'mm') AND nom_bull='BMS_A' GROUP BY num_mois
    à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT num_mois, COUNT(DISTINCT date_bull) FROM mois, diff_controle WHERE num_mois=TO_CHAR(date_bull(+),'mm') AND nom_bull(+)='BMS_1' GROUP BY num_mois
    J'aimerais faire évoluer cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT num_mois, COUNT(DISTINCT date_bull) FROM mois, diff_controle WHERE num_mois=TO_CHAR(date_bull,'mm') AND nom_bull='BMS_A' AND etat_diff='KO' AND date_bull IN (SELECT DISTINCT date_bull FROM diff_controle WHERE etat_diff='OK') GROUP BY num_mois
    MAIS LA SOUS REQUETE AVEC LE IN POSE PROBLEME... COMMENT FAIRE ?

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut Re: Encore une jointure sous Oracle pour la route
    Citation Envoyé par ebaynaud
    MAIS LA SOUS REQUETE AVEC LE IN POSE PROBLEME... COMMENT FAIRE ?
    et c'est à nous de deviner le probléme bien sûr

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    essaye ceci qui est beaucoup mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT num_mois, COUNT(DISTINCT date_bull) 
    FROM mois, diff_controle dc
    WHERE num_mois=TO_CHAR(date_bull,'mm') 
    AND nom_bull='BMS_A' 
    AND etat_diff='KO' 
    AND EXISTS (SELECT 1 FROM diff_controle d 
                         WHERE d.date_bull = dc.date_bull 
                             AND d.etat_diff='OK') 
    GROUP BY num_mois
    Je te conseille fortement de mieux écrire les requêtes (retour à la ligne et indentation), tu gagneras en efficacité

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    Ok je vais faire des efforts de mise en page de mes requêtes !
    Mais par contre avec ta solution, j'ai le même résultat qu'avant, c'est à dire:

    NU COUNT(DISTINCTDATE_BULL)
    -- ------------------------
    10 1
    Et moi ce que j'aimerais c'est:
    NU COUNT(DISTINCTDATE_BULL)
    -- ------------------------
    01 0
    02 0
    03 0
    04 0
    05 0
    06 0
    07 0
    08 0
    09 0
    10 1
    11 0
    12 0
    ou au mieux (mais ce n'est pas le plus important...), dans l'odre des num_mois de ma table mois à savoir:

    NU COUNT(DISTINCTDATE_BULL)
    -- ------------------------
    07 0
    08 0
    09 0
    10 1
    11 0
    12 0
    01 0
    02 0
    03 0
    04 0
    05 0
    06 0
    [/quote]

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Et là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT num_mois, COUNT(DISTINCT date_bull) 
    FROM mois, diff_controle dc 
    WHERE num_mois=TO_CHAR(date_bull,'mm') 
    AND nom_bull='BMS_A' 
    AND etat_diff='KO' 
    AND EXISTS (SELECT 1 FROM diff_controle d 
                         WHERE d.date_bull = dc.date_bull 
                             AND d.etat_diff='OK') 
    HAVING COUNT(date_bull) > 0
    GROUP BY num_mois

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    C'est pareil !

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    tu peux donner la requête que tu lances STP

  8. #8
    Membre expérimenté
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Par défaut
    la syntaxe suivante a été complètement zapper dans les requetes qui se sont suivies:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TO_CHAR(date_bull(+),'mm')
    A+

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    MAMMAR, t'as pas une solution à la question tout en haut de cette page ? C'est toi qui m'avais aidé pour trouvé le premier exemple mais je n'arrive pas à l'appliquer au deuxième...

  10. #10
    Membre expérimenté
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Par défaut
    Dans la solution que t'a donné ORAFRANCE pourquoi le left outer join a été zapper?
    y'aurait il un problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TO_CHAR(date_bull(+),'mm')

    A+

  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par ebaynaud
    MAMMAR, t'as pas une solution à la question tout en haut de cette page ? C'est toi qui m'avais aidé pour trouvé le premier exemple mais je n'arrive pas à l'appliquer au deuxième...
    ce serait bien d'essayer de réfléchir un peu quand même

    essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT num_mois, COUNT(DISTINCT date_bull) 
    FROM mois, diff_controle dc 
    WHERE num_mois=TO_CHAR(date_bull(+),'mm') 
    AND nom_bull='BMS_A' 
    AND etat_diff='KO' 
    AND EXISTS (SELECT 1 FROM diff_controle d 
                         WHERE d.date_bull = dc.date_bull 
                             AND d.etat_diff='OK') 
    HAVING COUNT(date_bull) > 0 
    GROUP BY num_mois

  12. #12
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    non cela ne marche pas, je n'ai toujours pas les zéros souhaités.
    mais j'ai réfléchis... (et oui !)
    et je me suis débrouillé en java que je maitrise u peu mieux pour avoir un résultat satisfaisant...

    enfin pour ma gouverne si quelqun me trouve la bonne solution en sql ce serait nicke !

    @+

  13. #13
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    A la barbare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select * from
    (SELECT num_mois, COUNT(DISTINCT date_bull) 
    FROM mois, diff_controle dc 
    WHERE num_mois=TO_CHAR(date_bull(+),'mm') 
    AND nom_bull='BMS_A' 
    AND etat_diff='KO' 
    AND EXISTS (SELECT 1 FROM diff_controle d 
                         WHERE d.date_bull = dc.date_bull 
                             AND d.etat_diff='OK') 
    GROUP BY num_mois) 
    where num_mois > 0

  14. #14
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    NU COUNT(DISTINCTDATE_BULL)
    -- ------------------------
    01                        7
    02                        4
    03                       15
    09                        1
    12                        3
    et non ! toujours pareil ! toujours pas de zéros !

  15. #15
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    je croyais que tu cherchais à éliminer les 0

    alors voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT num_mois, COUNT(DISTINCT date_bull) 
    FROM mois, diff_controle dc 
    WHERE num_mois=TO_CHAR(date_bull(+),'mm') 
    AND nom_bull='BMS_A' 
    AND etat_diff='KO' 
    AND EXISTS (SELECT 1 FROM diff_controle d 
                         WHERE d.date_bull = dc.date_bull 
                             AND d.etat_diff='OK') 
    GROUP BY num_mois

  16. #16
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    NU COUNT(DISTINCTDATE_BULL)
    -- ------------------------
    01                        7
    02                        4
    03                       15
    09                        1
    12                        3
    toujours pas pour cette fois...

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

Discussions similaires

  1. Jointure sql Oracle pour une vue
    Par KRis dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/01/2014, 12h03
  2. connaître la taille d'une table sous oracle
    Par loukili81 dans le forum Administration
    Réponses: 2
    Dernier message: 01/06/2007, 15h24
  3. Config d'une Datasource sous Oracle
    Par adilov dans le forum Wildfly/JBoss
    Réponses: 13
    Dernier message: 14/03/2007, 21h27
  4. Equivalent de la commande "SET" sous Oracle pour MySQL
    Par f1vincent dans le forum Outils
    Réponses: 4
    Dernier message: 21/12/2006, 21h20
  5. Demarrage automatique d'une base sous oracle 9i
    Par tarekos dans le forum Oracle
    Réponses: 4
    Dernier message: 20/03/2006, 17h48

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