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 Firebird Discussion :

Requête GROUP BY inclure les résultats NULL


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut Requête GROUP BY inclure les résultats NULL
    Bonjour,

    Voilà mon souci, j'ai une requête qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT 
      GROUPE.SIGLEGROUPE,
      Sum(PRODUCTION.STHTPRODUIT) AS CUMULPRODUCTION
    FROM
      AFFAIRE
      INNER JOIN DEVIS ON (AFFAIRE.CODEAFFAIRE = DEVIS.CODEAFFAIRE)
      INNER JOIN PRODUCTION ON (DEVIS.CODEDEVIS = PRODUCTION.CODEDEVIS)
      INNER JOIN GROUPE ON (PRODUCTION.CODEGROUPE = GROUPE.CODEGROUPE)
    WHERE
      AN =:REFAN AND 
      MOIS =:CHMOIS
    GROUP BY
      GROUPE.SIGLEGROUPE
    La table GROUPE comporte 10 enregistrements et seuls ceux disposant de chiffres apparaissent dans le résultat.
    Normal me direz-vous..

    Mais je souhaiterais néamoins que ceux qui ne sont pas représentés s'affichent quand même mais avec 0 dans la colonne CUMULPRODUCTION.

    J'ai bien tenté de forcer la jointure et d'écrire quelque chose de ce genre :
    COALESCE (Sum(PRODUCTION.STHTPRODUIT), 0) as CUMULPRODUCTION

    mais ça ne marche pas...

    Auriez-vous une solution à me proposer ?

    cantador

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 17
    Par défaut
    je dirais qu'il faut que tu utilise LEFT OUTER JOIN pour avoir tous les résultats.

    ce que je trouve bizzare c'est que tu fasses :
    affaire->devis->production->groupe

    alors que tu veux tous les groupes....

    moi je ferai
    groupe->production->devis->affaire

    du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
      GROUPE.SIGLEGROUPE,
      Sum(PRODUCTION.STHTPRODUIT) AS CUMULPRODUCTION
    FROM
      GROUPE
      LEFT OUTER JOIN PRODUCTION ON ...
      LEFT OUTER JOIN DEVIS ON ...
      LEFT OUTER JOIN AFFAIRE ON ...
    ...
    ou alors j'ai rien compris ...

  3. #3
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut
    Bonsoir,

    heu oui effectivement il y des tables qui ne servent à rien :

    cela donne après rectification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT 
      GROUPE.SIGLEGROUPE,
      Sum(PRODUCTION.STHTPRODUIT) AS CUMULPRODUCTION
    FROM
      PRODUCTION
      LEFT OUTER JOIN GROUPE ON (PRODUCTION.CODEGROUPE = GROUPE.CODEGROUPE)
    WHERE
      AN =:REFAN AND
      MOIS =:CHMOIS
    GROUP BY
      GROUPE.SIGLEGROUPE

    Mais ça ne règle pas mon problème car le résultat n'affiche que les groupes qui ont de la production..

    Ceux qui n'en n'ont pas ne sont pas présents alors que moi je voudrais TOUS les voir avec CUMULPRODUCTION = 0 pour ceux dont la production est nulle.

    et je voudrais aussi éviter l'introduction de zéro dans les tables...

    ???

    cantador

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    à quelle table appartiennent les champs ANN et MOIS ?

  5. #5
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut
    bonsoir makowski,

    les champs AN et MOIS appartiennent à la table production.

    j'ai tenté aussi ça mais sans 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
    25
    26
    27
    28
    29
    30
    31
     
    SELECT 
      GROUPE.SIGLEGROUPE,
     
      CASE
     
      WHEN
     
      Sum(PRODUCTION.STHTPRODUIT) IS NULL THEN
     
      0
     
      ELSE
     
      Sum(PRODUCTION.STHTPRODUIT) 
     
      END
     
      CUMULPRODUCTION
     
    FROM
      PRODUCTION
      LEFT OUTER JOIN GROUPE
      ON (PRODUCTION.CODEGROUPE = GROUPE.CODEGROUPE)
     
    WHERE
      AN =:REFAN AND
      MOIS =:CHMOIS
     
    GROUP BY
      GROUPE.SIGLEGROUPE
    merci par avance

    cantador

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Citation Envoyé par cantador Voir le message
    bonsoir makowski,

    les champs AN et MOIS appartiennent à la table production.
    Avant d'aller plus loin, ça existe des enregistrement dans PRODUCTION avec des valeurs pour ANN et MOIS mais avec des NULL pour STHTPRODUIT ?
    autrement dis que cherches tu vraiment à retrouver ?
    tous les GROUPE.SIGLEGROUPE avec ???

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

Discussions similaires

  1. Requête n'affiche pas les champs null
    Par souf_87 dans le forum Oracle
    Réponses: 6
    Dernier message: 04/03/2011, 17h11
  2. [RegEx] Retrouver les sous-groupes nommés dans les résultats
    Par SpaceFrog dans le forum Langage
    Réponses: 2
    Dernier message: 14/07/2010, 22h18
  3. Requête count renvoyant aussi les résultats=0
    Par Peq13 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/03/2010, 15h33
  4. Réponses: 3
    Dernier message: 08/09/2006, 12h35
  5. Requête SELECT problème dans les résultats trouvés ...
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/10/2005, 12h46

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