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

Langage SQL Discussion :

Somme de count et Alias ordonné pour 12 derniers mois


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Points : 11
    Points
    11
    Par défaut Somme de count et Alias ordonné pour 12 derniers mois
    Bonjour à tous,
    Je vous sollicite pour avoir un peu d'aide sur la requete SQL que je dois écrire.
    Je dois réaliser un graphique à l'aide d'ireport qui montre l'évolution (sous forme d'ajouts) de certains type d'objets.


    Ce que je cherche à faire, c'est montrer l'évolution (mois par mois du nombre d'objets créés) de cete façon :
    - si mars = 56 et avril = 60, alors sur mon graphique d'avril, je dois avoir 116
    - pouvoir retracer les 12 derniers mois dans l'ordre (si mois courant = mars, alors fevrier, janvier, decembre ...), sachant que la requete sera éxectutée automatiquement chaque mois.

    Ce que j'ai réussi à faire :
    -Isoler les 12 mois précédents
    -trouver le nombre d'objet par mois


    Ce qu'il me manque :
    - faire la somme des objets chaque mois
    J'imagine bien qu'il s'agit d'une somme de count (ou quelquechose dans ce genre, mais je n'ai pas réussi (count de quoi?)
    - Trouver une solution pour donner des intitulés clairs pour les mois (pas A, B, C, D)
    J'ai bien essayé M-1, M-2, etc... mais ca ne fonctionne pas avec ireport, car il positionne M-10, M-11 avant M-2 (même avec des M-010)

    Voici la requete que j'ai écrite :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    SELECT code_langage, CASE 
    						WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-1),'MM/YYYY') THEN 'A'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-2),'MM/YYYY') THEN 'B'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7)  like to_char(add_months(sysdate,-3),'MM/YYYY') THEN 'C'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7)  like to_char(add_months(sysdate,-4),'MM/YYYY') THEN 'D'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7)  like to_char(add_months(sysdate,-5),'MM/YYYY') THEN 'E'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-6),'MM/YYYY')  THEN 'F'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-7),'MM/YYYY')  THEN 'G'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-8),'MM/YYYY')  THEN 'H'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-9),'MM/YYYY')  THEN 'I'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-10),'MM/YYYY')  THEN 'J'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-11),'MM/YYYY')  THEN 'K'
                            WHEN SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) like to_char(add_months(sysdate,-12),'MM/YYYY')  THEN 'L'
                            ELSE 'x'
                            END AS MOIS, count(*)
    FROM BIG_DOUL, BIG_ALPATRES, BIG_LITRES
    WHERE BIG_ALPATRES.Id_ALPATRES=BIG_LITRES.Id_ALPATRES
    AND BIG_LITRES.id_DOUL=BIG_DOUL.id_DOUL
    AND code_langage = 'SQL'                 
    AND BIG_ALPATRES.ALPATRES like 'OPTRE0065'
    AND SUBSTR(to_char(date_creation,'DD/MM/YYYY'),3,4)IS NOT NULL
    AND SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7) IN 
                                                        (to_char(add_months(sysdate,-1),'MM/YYYY'), 
                                                        to_char(add_months(sysdate,-2),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-3),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-4),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-5),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-6),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-7),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-8),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-9),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-10),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-11),'MM/YYYY'),
                                                        to_char(add_months(sysdate,-12),'MM/YYYY'))
    GROUP BY code_langage, SUBSTR(to_char(date_creation,'DD/MM/YYYY'),4,7)
    ORDER BY MOIS DESC, code_langage


    Vous auriez une idée pour énumérer les 12 derniers mois dans l'odre naturel (janvier, décembre, novembre ...) ?
    En ce qui concerne le count, j'ai essayé quelques trucs mais je n'ai pas réussi, une petit idée qui pourrait me mettre sur la voie ?

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Une piste :
    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_langage
         , MOIS
         , sum(nb) over(partition by code_langage order by MOIS)
      from (
    SELECT code_langage
         , to_char(date_creation, 'YYYY/MM') as MOIS
         , count(*) as nb
      FROM BIG_DOUL, BIG_ALPATRES, BIG_LITRES
     WHERE BIG_ALPATRES.Id_ALPATRES=BIG_LITRES.Id_ALPATRES
       AND BIG_LITRES.id_DOUL=BIG_DOUL.id_DOUL
       AND code_langage = 'SQL'                 
       AND BIG_ALPATRES.ALPATRES LIKE 'OPTRE0065'
       AND date_creation >= trunc(add_months(sysdate,-12))
       and date_creation < trunc(sysdate)
     GROUP BY code_langage, to_char(date_creation, 'YYYY/MM')
           )
     ORDER BY MOIS DESC, code_langage
    Avec to_char vous pouvez formater différemment la date si besoin

Discussions similaires

  1. Somme de count et having
    Par Christophe P. dans le forum SQL
    Réponses: 2
    Dernier message: 21/05/2008, 09h37
  2. Somme de count() , requete imbriqué?
    Par mamiberkof dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2008, 16h10
  3. aide 2 axes ordonnées pour 2 axes abscisses
    Par bob-47 dans le forum Excel
    Réponses: 3
    Dernier message: 10/07/2007, 02h29
  4. Somme/Soustraction de colonnes/Alias
    Par Tartenpion dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2006, 13h34
  5. Comment créer dynamiquement un alias BDE pour Access ?
    Par colorid dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/10/2005, 14h20

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