Bonjour,
n'ayant pas d'oracle sous la main, je cherche à vérifier si la requête suivante fonctionne sous Oracle.
Le principe est de calculez pour chaque produit et par années/mois le chiffre d'affaire de la période et le nombre de ventes, ainsi que leurs cumuls depuis l'origine. La table S_COM.T_VENTE_VTE comporte les colonnes :
(VTE_DATE, VTE_PRODUIT, VTE_MONTANT)...
Voici la requête théorique à la norme SQL:2003 :
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 CREATE SCHEMA S_COM; CREATE TABLE S_COM.T_VENTE_VTE (VTE_DATE DATE, VTE_PRODUIT VARCHAR(32), VTE_MONTANT DECIMAL(16,2)) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-01-12', 'Zebulon', 33.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-01-13', 'Zebulon', 44.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-01-14', 'Zebulon', 22.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-02-12', 'Zebulon', 55.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-02-15', 'Zebulon', 11.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-02-18', 'Zebulon', 88.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-03-10', 'Zebulon', 32.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-01-10', 'Agormat', 21.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-01-12', 'Agormat', 47.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-01-14', 'Agormat', 53.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-01-15', 'Agormat', 29.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-02-12', 'Agormat', 16.21) INSERT INTO S_COM.T_VENTE_VTE VALUES ('2007-02-15', 'Agormat', 19.21)
Voici ce qu'un de mes amis à commencer à pisser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT VTE_PRODUIT, EXTRACT(YEAR FROM VTE_DATE) AS AN, EXTRACT(MONTH FROM VTE_DATE) AS MOIS, SUM(VTE_MONTANT) OVER(W_SUMCNT) AS TOTAL_MONTANT, SUM(SUM(VTE_MONTANT)) OVER (W_CUMULS) AS CUMUL_MONTANT, COUNT(ALL VTE_MONTANT) OVER(W_SUMCNT) AS QUANTITE, COUNT(COUNT(ALL VTE_MONTANT)) OVER(W_CUMULS) AS CUMUL_QUANTITE FROM S_COM.T_VENTE_VTE WINDOW W_SUMCNT AS (PARTITION BY VTE_PRODUIT, EXTRACT(YEAR FROM VTE_DATE), EXTRACT(MONTH FROM VTE_DATE)) W_CUMULS AS (ORDER BY VTE_PRODUIT UNBOUNDED PRECEDING)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT VTE_PRODUIT, EXTRACT(YEAR FROM VTE_DATE) AS AN , EXTRACT(MONTH FROM VTE_DATE) AS Mois, SUM(VTE_MONTANT) OVER (PARTITION BY VTE_PRODUIT, EXTRACT(YEAR FROM VTE_DATE), EXTRACT(MONTH FROM VTE_DATE)) AS TOTAL_MONTANT, COUNT(ALL VTE_MONTANT) OVER (PARTITION BY VTE_PRODUIT ORDER BY 1 ROWS UNBOUNDED PRECEDING) AS QUANTITE FROM T_VENTE_VTE;
Bref, si vous avez du temps ...
A +
Partager