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 :

Aide requête SQL


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut Aide requête SQL
    Bonjour,

    J'ai un problème avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT BORDEREAU.L_LIBELLE, REF_D_DEVIS,COUNT(REF_D_DEVIS),AVG(MT_MO_ACHAT), AVG(MT_MO_VENTE),(AVG(MT_MO_VENTE) - AVG(MT_MO_ACHAT)) AS différence
    FROM BORDEREAU INNER JOIN D_DEVIS
    ON BORDEREAU.C_CODE=D_DEVIS.REF_D_DEVIS INNER JOIN DEVIS
    ON D_DEVIS.N_DEVIS=DEVIS.N_DEVIS INNER JOIN INTERVENTION
    ON DEVIS.N_INTER=INTERVENTION.N_INTER
    WHERE REF_D_DEVIS IS NOT NULL
    AND REF_D_DEVIS IN(SELECT C_CODE FROM BORDEREAU WHERE C_BORDEREAU='ASSURANCE' AND C_ETAT_SYNC='I')
    AND BORDEREAU.L_LIBELLE IN(SELECT DISTINCT(BORDEREAU.L_LIBELLE) FROM BORDEREAU WHERE C_CODE=REF_D_DEVIS)
    AND INTERVENTION.D_CLOTURE_REELLE IS NOT NULL
    GROUP BY REF_D_DEVIS, BORDEREAU.L_LIBELLE
    ORDER BY REF_D_DEVIS
    J'ai besoin de vérifier si il s’agit de devis clôturé.
    Et pour cela il faut que je passe par la colonne D_CLOTURE_REELE de la Table INTERVENTION.
    Donc je vérifie si il y à une date ou non pour savoir si il est clôturé.

    Sauf qu'avec mon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE D_CLOTURE_REELLE IS NOT NULL


    Qui normalement doit me retourner tous les devis avec le champ de la colonne D_CLOTURE_REELE plein.

    Et la il me retourne absolument rien !


    A l'inverse quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE D_CLOTURE_REELLE IS NULL


    Cela ne change rien au résultat de ma requête !


    A votre avis d’où cela peut venir ?

    Cdlt
    Dernière modification par aieeeuuuuu ; 23/06/2014 à 11h25. Motif: balise code

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    vous avez plusieurs conditions qui portent sur la colonne REF_D_DEVIS.

    Une de ces conditions (autre que IS NULL / IS NOT NULL) doit rendre la sélectivité de votre requête à 0.

  3. #3
    Invité
    Invité(e)
    Par défaut re
    Je ne comprend pas !

    Si je remplace ça:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE REF_D_DEVIS IS NOT NULL
    AND INTERVENTION.D_CLOTURE_REELLE IS NOT NULL

    Par ça:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE REF_D_DEVIS!='0'
    AND D_CLOTURE_REELLE IS NOT NULL

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Pardon, je me suis mélangé.

    Si vous enlevez toute condition sur D_CLOTURE_REELLE, est-ce que des lignes sont retournées ?

  5. #5
    Invité
    Invité(e)
    Par défaut re
    Oui !
    C'est des que je pose cette condition qu'il ne me renvoi plus rien !

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bah dans ce cas c'est que vous n'avez aucune ligne dans la table intervention qui répond à cette règle "NOT NULL" + vos autres critères de sélections

  7. #7
    Invité
    Invité(e)
    Par défaut re
    On est d'accord que
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE D_CLOTURE_REELLE IS NOT NULL
    me permet bien de ne pas récupérer les champs plein ?

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    IS NOT NULL permet de ramener les lignes dont la colonne n'est pas à NULL.

    NULL est un état, une abscence de valeur.

    Par exemple, si vous ne travaillez pas avec Oracle, vous pouvez mettre dans une colonne de type varchar :
    - une chaine de caractère
    - rien (ou blanc)
    - null

    Avec la condition IS NOT NULL, si la valeur est "rien" ou "une chaine de caractere" la ligne sera sélectionnée.

  9. #9
    Invité
    Invité(e)
    Par défaut re
    Ok donc j'ai toujours un problème puisque je suis certain d'avoir des champs vide dans D_CLOTURE_REELLE:
    Images attachées Images attachées  

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    que donne cette requete ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * from intervention where D_CLOTURE_REELLE IS NOT NULL
    Si elle ramène des données, le comportement est normal => dans votre requete primaire vous n'avez aucune ligne correspondant au critere D_CLOTURE_REELLE IS NOT NULL à cause des autres conditions de selections.


    Si elle ne ramène pas de donnée => votre SGBD ne sais pas travailler avec ce prédicat / bug

  11. #11
    Invité
    Invité(e)
    Par défaut re
    "Si elle ramène des données, le comportement est normal => dans votre requete primaire vous n'avez aucune ligne correspondant au critere D_CLOTURE_REELLE IS NOT NULL à cause des autres conditions de selections."



    Je suis dans le cas ci dessus, que dois je faire ?

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Vous devez reprendre votre requete étape par étape.

    Enlevez petit à petit vos conditions ainsi que les jointures pour trouver quelle partie de la requete restreint vos données par rapport à ce que vous attendez

  13. #13
    Invité
    Invité(e)
    Par défaut Re
    Bonjour,

    ici ça fonctionne:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT
        D.N_DEVIS
     
    FROM
        D_DEVIS DD
        INNER JOIN DEVIS D
                ON DD.N_DEVIS=D.N_DEVIS
            INNER JOIN INTERVENTION I
                ON D.N_INTER=I.N_INTER
     
    WHERE I.D_CLOTURE_REELLE IS NOT NULL
     
    GROUP BY D.N_DEVIS

    Des que je lui demande DD.REF_D_DEVIS à la place de D.N_DEVIS, ça ne marche plus ?!

  14. #14
    Invité
    Invité(e)
    Par défaut re
    Et quand je lui demande N_DEVIS de la table D_DEVIS ça fonctionne aussi:

    Donc c'est d que lui demande REF_D_DEVIS de la table D_DEVIS que ça ne fonctionne plus:


  15. #15
    Invité
    Invité(e)
    Par défaut fin
    Merci pour tout !

    Il s'agissait apparemment d'un problème de droit. o_O

    Dsl de m’être mal exprimé durant la discussion.

    Encore merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/11/2007, 22h23
  2. Aide Requête SQL
    Par jjg65 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/07/2007, 10h37
  3. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 10h19
  4. Aide requête sql
    Par viny dans le forum PostgreSQL
    Réponses: 18
    Dernier message: 14/09/2006, 21h31
  5. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 14h04

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