Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL + Case !

Tableau de données en fonction du mois

    1 septembre 2011 à 20:58:09

    Slt les zéros,

    Je cherche à mettre en place une requête me permettant d'afficher des données par mois (facile me direz-vous...!)
    La difficulté est que je cherche à afficher uniquement les données/mois jusqu'à celui demandé.
    Si je demande le mois de mars j'affiche les données de janvier,février et mars.
    Si je demande le mois de décembre alors j'affiche les données de janvier à décembre.
    Pour cela,j'ai pensé à utiliser une instruction "case".

    Est-il possible de sortir plusieurs colonnes par cas ?


    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
    JumpY - Profil LinkedIn
      1 septembre 2011 à 21:33:13

      Il manque des précisions pour répondre à ton problème :
      1) Le SGBDR que tu utilises
      2) La structure de tes tables
      3) Si possible, un jeu d'essai et le résultat attendu en fonction de ce jeu d'essai (pour pouvoir tester les requêtes)

      Tout cela est indiqué dans les règles de ce forum.

      Par ailleurs, est-ce qu'il faut sélectionner uniquement les mois de l'année en cours ? Sinon, comment doit-on gérer les années ?

      Au final, ta requête ne devrait être qu'une simple condition avec un GROUP BY.
      • Partager sur Facebook
      • Partager sur Twitter
        1 septembre 2011 à 21:49:31

        Je travail en ce moment sur une architecture IBM AS400 autrement dit du DB2 pour le SGBDR couplé à un progiciel nommé PHP400 permettant la mise en place de rapports sous forme de tableaux récapitulatifs de données !
        Je travail sur une seule table contenant un champ année,un champ mois, un champ pour le secteur d'activité, un champ pour le type d'article et un champ qui me sert à calculer des CA.

        En gros je cherche à obtenir un tableau ressemblant à ça :
        Secteur d'activité Type Article CA Janvier CA Fevrier CA Mars CA Avril CA Mai CA Juin CA Juillet CA Août CA Septembre CA Octobre CA Novembre CA Décembre CA TOTAL
        - - - - - - - - - - - - - -

        La subtilité est que je veux afficher uniquement les CA des mois jusqu'à celui demandé !

        Voici le SQL que j'ai déjà mis en place :
        with TEMP AS(
        SELECT 
        S.GCOMAR,S.MMGRP1,S.MSCACT,S.MMITTY,S.MTYART,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 01) AS CA_JA,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 02) AS CA_FE,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 03) AS CA_MA,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 04) AS CA_AV,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 05) AS CA_MAI,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 06) AS CA_JUIN,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 07) AS CA_JUIL,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 08) AS CA_AO,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 09) AS CA_SE,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 10) AS CA_OC,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 11) AS CA_NO,
        (SELECT SUM(RMTCAR) FROM INFOCAH.STADET WHERE GCOMAR=S.GCOMAR AND MMGRP1 = S.MMGRP1 AND MMITTY=S.MMITTY AND RMONTH = 12) AS CA_DE
        FROM INFOCAH.STADET S
        
        /* Dans cette partie,je récupère le détail de mes CA */
        
        )
        
        select 
        S2.GCOMAR,S2.MMGRP1,S2.MSCACT,S2.MMITTY,S2.MTYART,
        
        /* Ici, j'aimerai au lieu d'afficher tous les mois dans mon tableau n'afficher que ceux qui m'interessent (ceux précédents le mois demandé ainsi que le mois demandé) */
        T.CA_JA,T.CA_FE,T.CA_MA,T.CA_AV,T.CA_MAI,T.CA_JUIN,T.CA_JUIL,T.CA_AO,T.CA_SE,T.CA_OC,T.CA_NO,T.CA_DE,
        
        /* Ici, j'effectue ma totalisation des CA jusqu'à celui demandé */
        CASE &(condit_2)
        WHEN 1
        THEN SUM(T.CA_JA)
        WHEN 2
        THEN SUM(DEC(T.CA_JA+T.CA_FE,10,4))
        WHEN 3
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA,10,4))
        WHEN 4
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV,10,4))
        WHEN 5
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI,10,4))
        WHEN 6
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI+T.CA_JUIN,10,4))
        WHEN 7
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI+T.CA_JUIN+T.CA_JUIL,10,4))
        WHEN 8
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI+T.CA_JUIN+T.CA_JUIL+T.CA_AO,10,4)) 
        WHEN 9
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI+T.CA_JUIN+T.CA_JUIL+T.CA_AO+T.CA_SE,10,4))
        WHEN 10
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI+T.CA_JUIN+T.CA_JUIL+T.CA_AO+T.CA_SE+T.CA_OC,10,4))
        WHEN 11
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI+T.CA_JUIN+T.CA_JUIL+T.CA_AO+T.CA_SE+T.CA_OC+T.CA_NO,10,4)) 
        WHEN 12
        THEN SUM(DEC(T.CA_JA+T.CA_FE+T.CA_MA+T.CA_AV+T.CA_MAI+T.CA_JUIN+T.CA_JUIL+T.CA_AO+T.CA_SE+T.CA_OC+T.CA_NO+T.CA_DE,10,4)) END AS TOTAL_CA
        
        from TEMP T
        JOIN INFOCAH.STADET S2
        ON T.GCOMAR = S2.GCOMAR
        AND T.MMGRP1 = S2.MMGRP1
        AND T.MMITTY = S2.MMITTY
        
        where s2.rsadat ='2011' and s2.rmonth ='2'
        group by S2.GCOMAR,S2.MMGRP1,S2.MSCACT,S2.MMITTY,S2.MTYART,T.CA_JA,T.CA_FE,T.CA_MA,T.CA_AV,T.CA_MAI,T.CA_JUIN,T.CA_JUIL,T.CA_AO,T.CA_SE,T.CA_OC,T.CA_NO,T.CA_DE
        


        Merci d'avance !
        • Partager sur Facebook
        • Partager sur Twitter
        JumpY - Profil LinkedIn

        SQL + Case !

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown