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 cumulée par Année et AnnéeMois


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut Somme cumulée par Année et AnnéeMois
    Bonjour,

    J'ai les données suivantes :
    Nom : Capture.JPG
Affichages : 281
Taille : 54,7 Ko

    Je pourrais très bien avoir un produit B !
    Je voudrais faire une somme cumulative par produit des quantités par année et par annéeMois.

    Je voudrais obtenir ceci :
    Nom : Capture2.JPG
Affichages : 271
Taille : 50,1 Ko

    J'ai tenté de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT ANNEE,
                                         ANNEE_MOIS,
                                         PRODUIT,
                                         SUM (NVL (QTE, 0))
                                         OVER (PARTITION BY PRODUIT
                                         ORDER BY ANNEE_MOIS ROWS
                                        BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
               FROM MaTable
               ORDER BY ANNEE_MOIS
    Cependant, cela fait la somme seulement par annéeMois et non par année.... :
    Nom : Capture3.JPG
Affichages : 271
Taille : 52,5 Ko

    Pouvez-vous m'aider svp ?

    Merci beaucoup.

  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,
    La colonne ANNEE n'apparait pas dans la requête, donc je ne vois pas comment elle pourrait être prise en compte...
    Pour moi il faut l'ajouter dans la "clause" PARTITION", en plus du produit.

    Tatayo.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    J'avais essayé et effectivement cela fonctionne, merci !

    Mon problème est en fait ailleurs... Si je filtre pour n'afficher que "202208" par exemple, le cumul se fait mal et je pense que c'est parce qu'il ne connaît plus les mois précédents....

  4. #4
    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
    Dans ce cas j'opterai pour une CTE. Ainsi le calcul est fait en amont, dans la CTE, et la requête finale va filtrer le résultat pour ne conserver que les lignes voulues.

    Tatayo.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    OK mais... qu'est une CTE svp ?

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Bonjour,

    Une CTE c'est une expression de table (Common Table Expression) qui s'exprime en SQL sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH <aliasCTE>
        AS ( sous-requête)
    <requête utilisant aliasCTE comme une table>
    C'est un peu plus lisible qu'une table dérivée (sous-requête dans la clause FROM) et plus puissant parce qu'on peut utiliser plusieurs fois la CTE dans la même requête.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Citation Envoyé par Aurel2340 Voir le message
    J'avais essayé et effectivement cela fonctionne, merci !

    Mon problème est en fait ailleurs... Si je filtre pour n'afficher que "202208" par exemple, le cumul se fait mal et je pense que c'est parce qu'il ne connaît plus les mois précédents....
    Tout simplement parce que les fonctions analytiques sont appliquées en dernier, juste avant la clause ORDER BY principale. C'est pour cela par exemple que tu peux appliquer une fonction analytique sur une fonction d'agrégation. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select object_type, owner, count(*) nb_objets, sum(count(*)) over (partition by owner) nb_objets_total
    from all_objects
    where owner like '%SYS%'
    group by object_type, owner;
    Si tu veux filtrer un résultat par rapport à un calcul de fonctions analytiques, tu dois d'abord l'inclure dans une vue interne où un bloc with.

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    Merci !

    C'est tout bon avec la méthode des CTE .

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

Discussions similaires

  1. [Généralités] Sql : somme qte par année sur x dernières années
    Par fffttt dans le forum WinDev
    Réponses: 6
    Dernier message: 06/10/2015, 18h48
  2. Somme cumulée par rapport à une colonne
    Par diflow69 dans le forum SQL
    Réponses: 4
    Dernier message: 13/01/2014, 13h44
  3. Somme cumulative par section
    Par arni63 dans le forum Webi
    Réponses: 2
    Dernier message: 18/10/2012, 15h14
  4. Somme cumulée par année et par mois
    Par labuche1138 dans le forum SAS Base
    Réponses: 2
    Dernier message: 24/07/2012, 10h18
  5. Somme cumulée par type de champ
    Par foyout dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/10/2009, 15h54

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