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 :

Cumul mensuel par projet


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Par défaut Cumul mensuel par projet
    Bonjour,
    j'ai une table qui ressemble à ceci
    Code_projet, opérateur, date_saisie, nombre_heure
    P1, 04, 10/02/2009, 8
    P1, O1, 10/03/2009, 8
    P1, O2, 15/03/2009, 7
    P1, O3, 10/04/2009, 8
    je cherche à faire une requête qui fasse
    code_projet, nombre_d'heures_sur_les_mois_antérieurs, nombre_d'heures_du_mois, somme
    je veux donc (si je rentre 04/2009 en paramètre)
    P1, cumul antérieur, 23
    P1, cumul mois, 8

    je pense que c'est par un case qu'il faut passer mais pour l'instant je n'y arrive pas; entre les "group by", les "sum" et les "case" ????

    Ps: version d'oracle=10.2.0.1.0
    Merci

  2. #2
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjour,

    Si tu veux que les benevoles puissent t'aider

    donne au moins la version oracle que tu utilises.

    un jeu de données

    le resultat que tu veux obtenir (en forme de données) sinon , ca risque de tomber aux oubliettes ....

    Il y a un tuto sur analytique ici

    http://lalystar.developpez.com/fonctionsAnalytiques/

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Bonjour.
    J'ai fait un truc vite fait qui peut vous convenir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT   v_mois.code_projet "projet", v_anterieur.somme "cumul antérieur",
             v_mois.somme "cumul mois", v_anterieur.somme + v_mois.somme "somme totale"
        FROM (SELECT   code_projet, SUM (nombre_heure) somme
                  FROM matable
                 WHERE date_saisie < TO_DATE ('04/2009', 'MM/YYYY')
              GROUP BY code_projet) v_anterieur,
             (SELECT   code_projet, SUM (nombre_heure) somme
                  FROM matable
                 WHERE date_saisie >= TO_DATE ('04/2009', 'MM/YYYY')
              GROUP BY code_projet) v_mois
       WHERE v_mois.code_projet = v_anterieur.code_projet(+)
    ORDER BY v_mois.code_projet
    NB la jointure externe n'est utile que s'il existe des nouveaux projets (n'existant pas dans les mois précédents).

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Par défaut Merci pour votre aide
    c'est nettement mieux mais j'ai encore quelques soucis car il me manque des enregistrements; je pense que ça vient de la jointure, mais je n'en suis pas certain

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je l'aurai fait ainsi :
    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
    SELECT
        code_projet,
        CASE
          WHEN date_saisie >= TO_DATE('04/2009', 'MM/YYYY')
          THEN 'Mois courant'
          ELSE 'Antérieur'
        END as Type_cumul
        SUM (nombre_heure) somme
    FROM
        matable
    GROUP BY
        code_projet,
        CASE
          WHEN date_saisie >= TO_DATE('04/2009', 'MM/YYYY')
          THEN 'Mois courant'
          ELSE 'Antérieur'
        END

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par oliviergot Voir le message
    c'est nettement mieux mais j'ai encore quelques soucis car il me manque des enregistrements; je pense que ça vient de la jointure, mais je n'en suis pas certain
    Il doit vous manquer les projets n'ayant pas d'heures pour le mois courant.
    La solution de Waldar me paraît convenir parfaitement.

  7. #7
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Je n'ai pas testé (j'ai pas de bd) mais je crois que ça marche aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select code_projet, 'mois_anterieur', sum(nombre_heure)
    from ma_table
    where date_saisie < TO_DATE('04/2009','MM/YYYY')
    GROUP BY code_projet
    UNION
    select code_projet, 'mois_en_cours', sum(nombre_heure)
    from ma_table
    where date_saisie >= TO_DATE('04/2009','MM/YYYY')
    GROUP BY code_projet;
    C'est peut être plus lourd ...

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

Discussions similaires

  1. etat de sortie par produit et cumul mensuel
    Par karim15 dans le forum WinDev
    Réponses: 2
    Dernier message: 20/09/2010, 09h45
  2. Cumuls mensuels par requête (même avec DSUM)
    Par jlfprofoto dans le forum Requêtes et SQL.
    Réponses: 19
    Dernier message: 21/08/2007, 17h31
  3. Cumul quantité par client
    Par bok2000 dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 16h07
  4. Cumul mensuel
    Par energies dans le forum Access
    Réponses: 23
    Dernier message: 30/03/2006, 12h10
  5. [MySQL] requete avec cumul mois par mois
    Par michaelbob dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/01/2006, 16h32

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