[WD12 - MySQL] Aux spécialistes SQL

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stéphane
Le #23894101
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
I.G.LOG
Le #23895451
"Stéphane" 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
Publicité
Poster une réponse
Anonyme