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

Somme de la valeur max pour chaque date dans regroupement


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Par défaut Somme de la valeur max pour chaque date dans regroupement
    Bonjour,
    Avec le code SQL ci-dessous, j'obtiens le résultat suivant :
    besoin réel
    SPOEOGPJ 4 137
    SPOEOGPJCA 22 265
    SPOEOGPN 9 104
    SPOEOGPNCA 11 198

    Ce résultat ne correspond pas à la réalité au niveau de la colonne Besoin.
    Il faudrait pouvoir faire la somme du max de S6PBPOS.EFFMINI de chaque jour.
    Je croyais que le sum distinct allait suffir, mais non.

    Aussi est-il possible de regrouper les champs qui contiennent J dans S6PBPOS.codelieu et les champs qui contiennent N?
    Pouvez-vous m'aider ?
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT S6PBPOS.CODELIEU, SUM( distinct S6PBPOS.EFFMINI) as besoin, SUM(HOPHJOU.IJQHSMAEXO/60/12) as réel
    FROM  S6PBPOS, HOPHJOU, HOPEMPL,HOPHABS,S6PPLGT
    WHERE SUBSTR( S6PBPOS.CODELIEU,0,3)='SPO'
    AND HOPHJOU.MATRI = HOPEMPL.MATRI
    AND HOPEMPL.MATRI = HOPHABS.MATRI
    AND HOPHJOU.DAT = S6PBPOS.DATJOUR
    AND S6PBPOS.DATJOUR = HOPHABS.DAT
    AND HOPHABS.MOTIF = S6PPLGT.ACTGT
    AND S6PBPOS.CODELIEU = S6PPLGT.CODELIEU
    AND EXTRACT(YEAR FROM S6PBPOS.DATJOUR)='2016' AND EXTRACT(MONTH FROM S6PBPOS.DATJOUR)='01'
    AND S6PBPOS.CODELIEU not in ('SPOCDGN', 'SPOCDGJ', 'SPOASTJ','SPOASTN')
    GROUP BY S6PBPOS.CODELIEU
    ORDER BY S6PBPOS.CODELIEU

  2. #2
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Si vous voulez grouper par d'autres valeurs, il suffit de les ajouter dans votre group by

    Sinon, vous pouvez vous pencher sur les fonctions de fenetrages, mais je suis pas sur que ca corresponde à ce que vous cherchez.

  3. #3
    Membre très actif
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Par défaut
    Bonjour,
    Lorsque que je ne regroupe pas, j'ai les résultats ci-dessous :
    01/01/16 SPOEOGPJ 4 1
    01/01/16 SPOEOGPJ 4 1
    01/01/16 SPOEOGPJ 4 1
    01/01/16 SPOEOGPJ 4 1
    02/01/16 SPOEOGPJ 4 1
    02/01/16 SPOEOGPJ 4 1
    02/01/16 SPOEOGPJ 4 1
    02/01/16 SPOEOGPJ 4 1
    01/01/16 SPOEOGPJCA 7 1
    01/01/16 SPOEOGPJCA 7 1
    01/01/16 SPOEOGPJCA 7 1
    01/01/16 SPOEOGPJCA 7 1
    01/01/16 SPOEOGPJCA 7 1
    01/01/16 SPOEOGPJCA 7 1
    01/01/16 SPOEOGPJCA 7 1
    01/01/16 SPOEOGPJCA 7 1
    02/01/16 SPOEOGPJCA 6 1
    02/01/16 SPOEOGPJCA 6 1
    02/01/16 SPOEOGPJCA 6 1
    02/01/16 SPOEOGPJCA 6 1
    02/01/16 SPOEOGPJCA 6 1
    02/01/16 SPOEOGPJCA 6 1

    Il faudrait que je puisse par regroupement avoir le résultat ci-dessous :
    Type/besoin/effréel
    SPOEOGPJ/8/8
    SPOEOGPJCA/13/14

    Je sais pas comment faire mon regroupement.
    Merci pour votre aide

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Tu peux faire un select qui correspond aux valeurs intermédiaires que tu souhaites (le max de chaque jour)
    puis tu refais un select sur le résultat précédent pour faire ta somme

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a, sum(nb) 
    from (
     select a, mois, max(jour) as nb from X group by a, mois)
    group by a

  5. #5
    Membre très actif
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Par défaut
    Merci pour votre réponse.
    Comment pouvons-nous faire avec le SQL ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT S6PBPOS.CODELIEU, max(S6PBPOS.EFFMINI) as besoin, sum(HOPHJOU.IJQHSMAEXO/60/12) as réel
    FROM  S6PBPOS, HOPHJOU, HOPEMPL,HOPHABS,S6PPLGT
    WHERE SUBSTR( S6PBPOS.CODELIEU,0,3)='SPO'
    AND HOPHJOU.MATRI = HOPEMPL.MATRI
    AND HOPEMPL.MATRI = HOPHABS.MATRI
    AND HOPHJOU.DAT = S6PBPOS.DATJOUR
    AND S6PBPOS.DATJOUR = HOPHABS.DAT
    AND HOPHABS.MOTIF = S6PPLGT.ACTGT
    AND S6PBPOS.CODELIEU = S6PPLGT.CODELIEU
    AND EXTRACT(YEAR FROM S6PBPOS.DATJOUR)='2016' AND EXTRACT(MONTH FROM S6PBPOS.DATJOUR)='01'
    AND S6PBPOS.CODELIEU not in ('SPOCDGN', 'SPOCDGJ', 'SPOASTJ','SPOASTN')
    GROUP BY S6PBPOS.CODELIEU
    ORDER BY S6PBPOS.CODELIEU

  6. #6
    Membre très actif
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Par défaut
    J'ai essayé en écrivant le sql comme ci-dessous, mais en vain :
    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
    SELECT S6PBPOS.CODELIEU, sum(besoin)
    FROM (
    SELECT S6PBPOS.DATJOUR,S6PBPOS.CODELIEU, max(S6PBPOS.EFFMINI) as besoin, sum(HOPHJOU.IJQHSMAEXO/60/12) as réel
    FROM  S6PBPOS, HOPHJOU, HOPEMPL,HOPHABS,S6PPLGT
    WHERE SUBSTR( S6PBPOS.CODELIEU,0,3)='SPO'
    AND HOPHJOU.MATRI = HOPEMPL.MATRI
    AND HOPEMPL.MATRI = HOPHABS.MATRI
    AND HOPHJOU.DAT = S6PBPOS.DATJOUR
    AND S6PBPOS.DATJOUR = HOPHABS.DAT
    AND HOPHABS.MOTIF = S6PPLGT.ACTGT
    AND S6PBPOS.CODELIEU = S6PPLGT.CODELIEU
    AND EXTRACT(YEAR FROM S6PBPOS.DATJOUR)='2016' AND EXTRACT(MONTH FROM S6PBPOS.DATJOUR)='01'
    AND S6PBPOS.CODELIEU not in ('SPOCDGN', 'SPOCDGJ', 'SPOASTJ','SPOASTN')
    GROUP BY S6PBPOS.DATJOUR, S6PBPOS.CODELIEU
    ORDER BY  S6PBPOS.CODELIEU,S6PBPOS.DATJOUR)
    GROUP BY besoin

Discussions similaires

  1. [AC-2007] Calcul sur une date et obtenir des valeurs pour chaque date obtenue
    Par missalias dans le forum Modélisation
    Réponses: 38
    Dernier message: 07/04/2014, 09h22
  2. [XL-2010] Afficher dans un tableau2 la Valeur MAX pour chaque colonne d'un tableau 1
    Par debutanteVba dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 30/10/2013, 15h28
  3. Réponses: 9
    Dernier message: 14/05/2012, 15h41
  4. Réponses: 1
    Dernier message: 03/07/2007, 16h04
  5. [Requête] faire la somme des max pour chaque utilisateur
    Par novices dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2007, 11h45

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