Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/03/2011, 10h23   #1
Futur Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 15
Points : 15
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
antalata est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 10h57   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
En faisant un Select avec un From et une condition WHERE sur la date.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/03/2011, 11h39   #3
Futur Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 15
Points : 15
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
antalata est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 11h50   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

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

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Code sql :
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 :
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é
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 12h01   #5
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
J'imagine que tu veux les résultats dans deux colonnes et non deux lignes.

Tu peux faire comme ceci :

Code :
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
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

(\ _ /)
(='.'=)
Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 12h10   #6
Futur Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 15
Points : 15
grand merci,

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

exemple 1 er cas
Code :
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
antalata est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 12h17   #7
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 261
Points : 3 261
Un petit exemple qui se teste facilement sur le schéma SCOTT :

Code :
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;
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 12h32   #8
Futur Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 15
Points : 15
Merci beaucoup

et maintenant la même chose en remplaçant 'sal' par
Code :
NVL(SUM(DECODE(SENS, 1, MT_MN)) ,0) -NVL(SUM(DECODE(SENS, 2, MT_MN)) ,0)


à condition, bien sur, que ce fut possible

Merci
antalata est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 10h27   #9
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
Utilise une requete imbriquée pour te ramener au cas précédent.
Je ne sais pas si c'est possible de faire tout en même temps mais ça sera de toute façon plus lisible de le faire en deux fois.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

(\ _ /)
(='.'=)
Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 14h44   #10
Futur Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 15
Points : 15
c'est ce que j'ai fait.

merci à tous
antalata est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h22.


 
 
 
 
Partenaires

Hébergement Web