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

Oracle Discussion :

totaliser des mouvements inférieurs à une date


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Juillet 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 60
    Par défaut totaliser des mouvements inférieurs à une date
    bonjour,

    comment totaliser des montants (SUM() ou autre) selon que la date est inférieure ou supérieure à une date donnée.

    merci

  2. #2
    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
    En faisant un Select avec un From et une condition WHERE sur la date.

  3. #3
    Membre actif
    Inscrit en
    Juillet 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 60
    Par défaut
    merci

    Bien sur mais pour avoir la réponse dans une même requête ?

    je voudrais, sans avoir à faire deux requêtes, obtenir la somme des mouvements qui répondent à une condition et ceux qui n'y répondent pas.

    merci

  4. #4
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select sum(case when condition then col else 0 end ) c_ok
         , sum(case when condition then 0 else col end ) c_ko
    from table;

    ou

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select sum(ok) c_ok
         , sum(ko) c_ko
    from ( select case when condition then col else 0 end ok
                , case when condition then 0 else col end ko 
           from  table);

    Je ne suis pas certain de la première, je n'ai pas testé

  5. #5
    Membre actif
    Inscrit en
    Juillet 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 60
    Par défaut
    grand merci,

    toutefois la "colonne" indiquée est déja la somme d'une soustraction

    exemple 1 er cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT sum(case when condition then NVL(SUM(DECODE(SENS, 1, MT_MN)) ,0) -NVL(SUM(DECODE(SENS, 2, MT_MN)) ,0) else 0 end ) c_ok
    FROM TABLE
    et donc s'inscrit dans un "GROUP BY"

    merci

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Un petit exemple qui se teste facilement sur le schéma SCOTT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    define DATE_LIMITE='01/01/1982'
    select 	sum(case when hiredate >= to_date('&DATE_LIMITE', 'DD/MM/YYYY') then 0 else sal end) SUP_DATE, 
    		sum(case when hiredate < to_date('&DATE_LIMITE', 'DD/MM/YYYY') then 0 else sal end ) INF_DATE
    from scott.emp;

  7. #7
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    J'imagine que tu veux les résultats dans deux colonnes et non deux lignes.

    Tu peux faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT
       SUM(champ * decode(sign(date_ref-date), 1, 1, 0) somme_avant,
       SUM(champ * decode(sign(date_ref-date), 0, 1, -1, 1, 0) somme_apres
    FROM Table;

    Edit> Grillé par ojo777, j'ai pas tenté les case dans le SUM, j'ai contourné à l'ancienne mais le principe est le même

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

Discussions similaires

  1. [Dates] ajouter des mois dans une date
    Par illegalsene dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2007, 14h41
  2. JSP incrémentation des jours d'une date
    Par taroudant dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 07/08/2006, 10h20
  3. Boucle en Dos pour lister des fichiers selon une date
    Par Corben dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2005, 12h17
  4. Récupérer des infos d'une date
    Par mister3957 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 25/10/2005, 10h08

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