Requête cumul Access

Fermé
lovidia Messages postés 1 Date d'inscription mercredi 29 juin 2011 Statut Membre Dernière intervention 29 juin 2011 - 29 juin 2011 à 22:02
 java4ever - 2 juil. 2011 à 22:57
bonjour,
après avoir rechercher sur différents sites je ne trouve pas de réponse à la requête que je veux faire, j'espère que quelqu'un pourra m'aider car j'arrive à la fin de mon stage ...

j'ai un champs [date facturation] qui correspond un 30 de chaque mois
et un champs [CA] dont je fais la somme pour avoir le total du CA par mois.

Mais je n'arrive pas à faire une requête de sorte que le mois de février soit égal aux CA de janvier + février, celui de mars soit égal à janvier+février+ mars ...

Car je dois ensuite utiliser cette requête de cumul pour en faire une courbe dans un graphique.

MERCI

1 réponse

Bonjour,
L'énoncé de ton problème n'étant pas très précis, j'ai imaginé le contexte suivant :
Un table "facture" contient au moins une colonne "date_fac" et une colonne "montant_fac".
J'ai supposé que tu voulais une requête qui donne, en une seule ligne, le cumul des CA pour chacun des 12 mois de l'année.

Si tu ne connais pas, je te laisse apprécier la mage des tables pivot !

Solution : créer une table pivot qui contient 12 lignes, une par mois avec une colonne contenant le mois à cumuler et 12 colonnes qui contiennent un "1" si le montant d'une facture doit être additionné pour le mois de la colonne, 0 sinon.
Voici la requête sous mysql (adapter la fonction MONTH() pour Access, je crois que c'est FORMAT("yyy",dateConcernee) :
-- Requete utilisant une table pivot et une table de factures datée
-- qui donne le CA cumulé sur les 12 mois de l'année en cours (Year(NOW))
SELECT 'Cumul des CA de facture par mois de l''année courante' from dual;
SELECT
  SUM(facture.fac_montant*pivotfacture.janvier) AS CUM_JANVIER,
  SUM(facture.fac_montant*pivotfacture.fevrier) AS CUM_FEVRIER,
  SUM(facture.fac_montant*pivotfacture.mars) AS CUM_MARS,
  SUM(facture.fac_montant*pivotfacture.avril) AS CUM_AVRIL,
  SUM(facture.fac_montant*pivotfacture.mai) AS CUM_MAI,
  SUM(facture.fac_montant*pivotfacture.juin) AS CUM_JUIN,
  SUM(facture.fac_montant*pivotfacture.juillet) AS CUM_JUILLET,
  SUM(facture.fac_montant*pivotfacture.aout) AS CUM_AOUT,
  SUM(facture.fac_montant*pivotfacture.septembre) AS CUM_SEPTEMBRE,
  SUM(facture.fac_montant*pivotfacture.octobre) AS CUM_OCTOBRE,
  SUM(facture.fac_montant*pivotfacture.novembre) AS CUM_NOVEMBRE,
  SUM(facture.fac_montant*pivotfacture.decembre) AS CUM_DECEMBRE
  
FROM
  facture, pivotfacture
WHERE
  Month(facture.FAC_DATE) = pivotfacture.MOISCUMUL
  AND YEAR(facture.FAC_DATE) = YEAR(NOW())

Le script pour créer la table pivot :
CREATE TABLE 'pivotfacture' (
  'ID' bigint(20) NOT NULL,
  'JUILLET' int(11) NOT NULL,
  'AOUT' int(11) NOT NULL,
  'AVRIL' int(11) NOT NULL,
  'DECEMBRE' int(11) NOT NULL,
  'JUIN' int(11) NOT NULL,
  'OCTOBRE' int(11) NOT NULL,
  'MAI' int(11) NOT NULL,
  'MARS' int(11) NOT NULL,
  'MOISCUMUL' int(11) NOT NULL,
  'SEPTEMBRE' int(11) NOT NULL,
  'JANVIER' int(11) NOT NULL,
  'NOVEMBRE' int(11) NOT NULL,
  'FEVRIER' int(11) NOT NULL,
  PRIMARY KEY ('ID')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Pour le remplissage de pivot, moi je l'ai fait en java avec JPA, mais je pense que c'est hors sujet pour toi, donc voici l'export en mode sql pour insérer les lignes :
Ne t'inquiète pas les mois ne sont pas dans l'ordre, mais ça na aucune importance car la requete nomme les colonnes
Bon travail en espérant que je ne suis pas hors sujet
Ha, et voici mon insert pour la table facture :
  INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-01-04', 100.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-02-04', 200.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-03-04', 300.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-04-04', 400.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-05-04', 500.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-06-04', 600.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-07-04', 700.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-08-04', 800.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-09-04', 900.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-10-04', 1000.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-11-04', 1100.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-12-04', 1200.00);
   
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-01-10', 100.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-02-10', 200.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-03-10', 300.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-04-10', 400.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-05-10', 500.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-06-10', 600.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-07-10', 700.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-08-10', 800.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-09-10', 900.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-10-10', 1000.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-11-10', 1100.00);
   INSERT INTO FACTURE (FAC_DATE,FAC_MONTANT) VALUES ('2011-12-10', 1200.00);
0