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 ?
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.
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
× 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.