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 :

Requête SUM en fonction de tri


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Jefty
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 203
    Points : 125
    Points
    125
    Par défaut Requête SUM en fonction de tri
    Bonjour,

    Je n'arrive pas à réaliser une requête de tri sur 3 tables avec différents filtre de tri.
    Voici l'analyse de ma BDD:



    Ma requête doit sélectionner les PLAT_NOM et calculer la somme des QUANTITE en rapport en groupant les noms.
    Les DATE dans la table PLAT doivent avoir une DATE dans la table ETAT ayant reçu une DATE_ENREGISTREMENT_VALIDATION pour une ECOLE_CLE particulière. Donc celle-ci ne doit pas être null.
    Par exemple:
    4 NOM_PLAT du 30/03/2012 pour ECOLE_CLE = 000064
    ECOLE_CLE = 000064 doit avoir une DATE_ENREGISTREMENT_VALIDATION dans ETAT pour une DATE correspondant au 30/03/2012.
    Le but étant de faire une différence entre les QUANTITE de NOM_PLAT validé par une ECOLE_CLE, et celle non validé. (j'espère que c'est clair)
    Cette requête doit se faire entre 2 dates passées en paramètres.

    J'ai donc réalisé cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT PLAT.PLAT_NOM, SUM(QUANTITE) AS Total
    FROM PLAT, ETAT
    WHERE PLAT.ECOLE_CLE = ETAT.ECOLE_CLE
    AND ETAT.DATE = PLAT.DATE
    AND ETAT.DATE_ENREGISTREMENT_CONFIRMATION <> ''
    AND PLAT.DATE BETWEEN  {Param_Date_Lundi} AND {Param_Date_Vendredi}
    GROUP BY PLAT.PLAT_NOM
    Je ne retrouve pas tout ce que je devrais.
    Je pense d'ailleurs ne pas spécialement respecter les bonnes méthodes de jointure.

    Merci d'avance pour toute aide apporté.

    Jefty

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Citation Envoyé par Jefty Voir le message
    Je ne retrouve pas tout ce que je devrais.
    Je pense d'ailleurs ne pas spécialement respecté les bonnes méthodes de jointure.

    Merci d'avance pour toute aide apporté.

    Jefty
    Mais encore ? Tu as une mauvaise somme, pas de somme du tout ?
    Est-ce que tu peux nous donner un jeu de test, ce que tu veux obtenir et ce que tu obtiens ?

    Tatayo.

  3. #3
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Pour les normes de jointures : c'est ici.

    Sinon sous quel SGBD es-tu ?
    ~ Lola ~

  4. #4
    Membre habitué Avatar de Jefty
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 203
    Points : 125
    Points
    125
    Par défaut
    J'ai une mauvaise somme on va dire.
    En gros en inversant juste le fait que DATE_ENREGISTREMENT_VALIDATION soit égale ou différent de rien, je devrais avoir en additionnant les 2 résultats pour le même NOM_PLAT, le total validé ou non.

    Imaginons que j'ai 800 en QUANTITE total pour un NOM_PLAT nommé MIAM. On va dire 200 le 01/01/2012 pour ECOLE_CLE = 1, 400 le 02/01/2012 ECOLE_CLE = 1 et 200 le 03/01/2012 ECOLE_CLE = 2.

    Dans ETAT:
    J'ai pour ECOLE_CLE = 1 et pour le 01/01/2012 une DATE_ENREGISTREMENT_VALIDATION non null
    pour ECOLE_CLE = 1 et pour le 02/01/2012 une DATE_ENREGISTREMENT_VALIDATION null
    pour ECOLE_CLE = 2 et pour le 03/01/2012 une DATE_ENREGISTREMENT_VALIDATION non null

    Ce que je veux c'est la SUM des QUANTITE des PLAT-NOM validé par une DATE_ENREGISTREMENT_VALIDATION non null, pour toutes les ECOLE_CLE entre le 01/01/2012 et le 03/01/2012

    Je vais avoir pour MIAM une QUANTITE = 400

    J'espère que c'est plus clair^^

    Pour le SGBD, je suis sous Webdev avec HyperFile.

  5. #5
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par Jefty Voir le message
    J'ai une mauvaise somme on va dire.
    En gros en inversant juste le fait que DATE_ENREGISTREMENT_VALIDATION soit égale ou différent de rien, je devrais avoir en additionnant les 2 résultats pour le même NOM_PLAT, le total validé ou non.
    Attention, si pour votre SGBD '' est équivalent à NULL, alors il faut utiliser et non .

  6. #6
    Membre habitué Avatar de Jefty
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 203
    Points : 125
    Points
    125
    Par défaut
    je suis bien d’accord Rei mais ça ne fonctionne pas sur HyperFile de cette manière.

    Pourtant la Doc de Webdev dit le contraire, mais après vérification auprès du support technique par téléphone,on m'a confirmé que ça ne fonctionné pas...
    Au moins <> '' fait la même chose même si c'est moins propre que IS NOT NULL.

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Ok, <> '' équivaut à IS NOT NULL

    Mais = '' équivaut-il à IS NULL ?

    Quitte à être tout pourri, souvent les outils le sont pour de bon, et ne suivent aucune logique...
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Membre habitué Avatar de Jefty
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 203
    Points : 125
    Points
    125
    Par défaut
    Oui oui ça fonctionne aussi le = ''

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Dans ton exemple tu nous dit le résultat que tu voudrais avoir mais pas le résultat que tu obtiens concrètement ?
    ~ Lola ~

  10. #10
    Membre habitué Avatar de Jefty
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 203
    Points : 125
    Points
    125
    Par défaut
    C'est ça.

  11. #11
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Me suis mal formulée, en fait je voulais que tu nous donne le résultat que tu obtiens concrètement en plus.

    Faut me pardonner c'est vendredi...
    ~ Lola ~

  12. #12
    Membre habitué Avatar de Jefty
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 203
    Points : 125
    Points
    125
    Par défaut
    Pas grave ^^

    J’obtiens un résultat complétement faussé:
    Ça me fait une multiplication ou un cumul.

    Au lieu d'avoir 2111 j'ai 54000 par exemple.

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Tu peux nous donner le résultat de la requête sans aggrégation (sans sum ni group by) ?

    Tatayo.

  14. #14
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est normal puisque vous avez deux jointures (1,n) avec la table Ecole.
    Ici il faut faire un test d'existence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      SELECT PLAT.PLAT_NOM, SUM(PLAT.QUANTITE) AS Total
        FROM PLAT
       WHERE PLAT.DATE BETWEEN  {Param_Date_Lundi} AND {Param_Date_Vendredi}
         AND EXISTS (SELECT NULL
                       FROM ETAT
                      WHERE ETAT.ECOLE_CLE = PLAT.ECOLE_CLE
                        AND ETAT.DATE = PLAT.DATE
                        AND ETAT.DATE_ENREGISTREMENT_CONFIRMATION <> '')
    GROUP BY PLAT.PLAT_NOM;

  15. #15
    Membre habitué Avatar de Jefty
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 203
    Points : 125
    Points
    125
    Par défaut
    Merci, j'essayerais ça demain, ou plus tard ^^


    Jefty

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

Discussions similaires

  1. [AC-2003] Requête SQL avec SUM en fonction d'un attribut
    Par Linuss dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/05/2012, 09h10
  2. Probléme requête avec deux fonction SUM
    Par kamnouz dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/04/2010, 16h29
  3. Tri d'une requête SELECT en fonction de cases à cocher
    Par ju0123456789 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/12/2008, 10h18
  4. fonction de tri par introspection
    Par ned-flanders dans le forum C++
    Réponses: 7
    Dernier message: 21/10/2004, 11h49
  5. Réponses: 2
    Dernier message: 08/04/2004, 16h30

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