Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD12 - MySQL] Aux spécialistes SQL

2 réponses
Avatar
I.G.LOG
Bonjour à tous,

j'ai - classiquement - une table "facture" et une autre "ligne_Facture" dans
laquelle je stocke les ventes d'articles.
Je voudrais faire une requete d'analyse statistique des ventes sur les douze
derniers mois (par exemple) pour un article.
Habituellement je traite ce type de requete avec des unions pour stocker les
resultats sous forme de colonne, comme suit:

select TOT1, TOT2, TOT3 from
(select sum(xxx) as TOT1, 0 as TOT2, 0 as TOT3 from ligne_facture where date
between ...)
union
(select 0 as TOT1, sum(xxx) as TOT2, 0 as TOT3 from ligne_facture where date
between ...)
...

Mais je voudrais laisser l'utilisateur choisir la période et les
intervalles. De ce fait je ne vois pas comment construire une telle requete
dynamiquement.
Voyez vous une solution simple a ce probleme ?

Merci

2 réponses

Avatar
Stéphane
Le 21/10/2011 16:19, I.G.LOG a écrit :
Bonjour à tous,

j'ai - classiquement - une table "facture" et une autre "ligne_Facture" dans
laquelle je stocke les ventes d'articles.
Je voudrais faire une requete d'analyse statistique des ventes sur les douze
derniers mois (par exemple) pour un article.
Habituellement je traite ce type de requete avec des unions pour stocker les
resultats sous forme de colonne, comme suit:

select TOT1, TOT2, TOT3 from
(select sum(xxx) as TOT1, 0 as TOT2, 0 as TOT3 from ligne_facture where date
between ...)
union
(select 0 as TOT1, sum(xxx) as TOT2, 0 as TOT3 from ligne_facture where date
between ...)
...

Mais je voudrais laisser l'utilisateur choisir la période et les
intervalles. De ce fait je ne vois pas comment construire une telle requete
dynamiquement.
Voyez vous une solution simple a ce probleme ?

Merci





Et avec un truc du genre :

SELECT
SUM(CASE WHEN MONTH(DateLigne) = 1 THEN Prix ELSE 0 END) AS "TOT1",
SUM(CASE WHEN MONTH(DateLigne) = 2 THEN Prix ELSE 0 END) AS "TOT2",
SUM(CASE WHEN MONTH(DateLigne) = 3 THEN Prix ELSE 0 END) AS "TOT3",
...
FROM ligne_facture

Ensuite tu peux remplacer MONTH(DateLigne)=x par le test qui te convient.

--
Ami Calmant
Stéphane
Avatar
I.G.LOG
"Stéphane" a écrit dans le message de news:
j7ut78$hgb$
Le 21/10/2011 16:19, I.G.LOG a écrit :
Bonjour à tous,

j'ai - classiquement - une table "facture" et une autre "ligne_Facture"
dans
laquelle je stocke les ventes d'articles.
Je voudrais faire une requete d'analyse statistique des ventes sur les
douze
derniers mois (par exemple) pour un article.
Habituellement je traite ce type de requete avec des unions pour stocker
les
resultats sous forme de colonne, comme suit:

select TOT1, TOT2, TOT3 from
(select sum(xxx) as TOT1, 0 as TOT2, 0 as TOT3 from ligne_facture where
date
between ...)
union
(select 0 as TOT1, sum(xxx) as TOT2, 0 as TOT3 from ligne_facture where
date
between ...)
...

Mais je voudrais laisser l'utilisateur choisir la période et les
intervalles. De ce fait je ne vois pas comment construire une telle
requete
dynamiquement.
Voyez vous une solution simple a ce probleme ?

Merci





Et avec un truc du genre :

SELECT
SUM(CASE WHEN MONTH(DateLigne) = 1 THEN Prix ELSE 0 END) AS "TOT1",
SUM(CASE WHEN MONTH(DateLigne) = 2 THEN Prix ELSE 0 END) AS "TOT2",
SUM(CASE WHEN MONTH(DateLigne) = 3 THEN Prix ELSE 0 END) AS "TOT3",
...
FROM ligne_facture

Ensuite tu peux remplacer MONTH(DateLigne)=x par le test qui te convient.

--
Ami Calmant
Stéphane



Bonjour,
Effectivement, c'est une piste que je vais creuser.
Merci beaucoup pour la réponse
Phil