Compter nb article/jour dans un mois

Résolu/Fermé
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 - 28 mai 2013 à 15:52
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 - 30 mai 2013 à 15:18
Bonjour,

J'ai une table lancement qui contient les champs : codeArticle, qteRea, dateRea
Voici ma problématique :
J'aimerais récupéré le nombre de codeArticle par jours dans un mois.

Un peu plus d'explication :
Le select count(distinct codeArticle) pour month(dateRea) = 1 ne va par car un codeArticle peut être fait deux jours dans le mois et le select distinct ne va le compter qu'une seule fois, alors que je leux deux fois.
Inversement, count(codeArticle) pour month(dateRea) = 1 ne convient pas car deux production d'un article peut se faire dans la journée, le count va alors le compter deux fois alors que je ne le veux qu'une fois.

Enfaite il faudrait un count(distinct codeArticle) par jours et ensuite un sum de ca pour le mois.
(C'est cool, en écrivant mon problème j'ai trouvé la "solution")

Bref, pour le moment j'ai ceci comme squelette de requete :
(Admettons que c'est pour l'année 2012, clause implicite je ne la précise pas dans la requete)

with tabtemp(codeArticle, jan, fev, [...], nov, dec) AS
(SELECT codeArticle,
CASE WHEN MONTH(dateRea) = 1 THEN .... ELSE 0 END,
CASE WHEN MONTH(dateRea) = 2 THEN .... ELSE 0 END,
[.......],
CASE WHEN MONTH(dateRea) = 11 THEN .... ELSE 0 END,
CASE WHEN MONTH(dateRea) = 12 THEN .... ELSE 0 END
FROM lancement)

SELECT codeArticle, sum(jan), sum(fev), [...], sum(nov), sum(dec) from tabtemp group by grouping sets(codeArticle)


Je travaille avec une base DB2, je ne peux pas faire de procédure stockée.


Merci d'avance à ceux qui m'aideront !



A voir également:

3 réponses

Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
29 mai 2013 à 15:02
Hello,

Comment stockes-tu les mois, et surtout les jours de chaque mois dans ta base ?
De prim'abord, je dirais que les SUM sont inutiles, et qu'un GROUP BY sur les jours te donneras ce qu'il te faut
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
29 mai 2013 à 15:15
Disons que pour chaque production, j'ai une ligne dans ma table. Les dates sont entières au format yyyy-mm-dd

Le group by sur la date me donne bien ce que je veux, le problème, c'est que je suis obligé d'utiliser cette "structure" avec un case pour chaque mois car j'ai une deuxieme partie de la requete qui utilise ce systeme et pour la quelle je divise le résultat par ce que je cherche à faire.
J'ai simplifié la table pour cibler ma demande.

J'ai normalement d'autre champ, dont le numéro de lancement, pour le quel je fais un count dans chaque case when, et que je sum ensuite dans la requete plus bas

En gros j'ai ca :

with tabtemp(machine, famille, jan, jjan, fev, jfev, ... dec) as
(SELECT machine, famille,
case when month(date) = 1 then [nombre d'article par jours pour chaque jour dans le mois] else 0 end,
case when month(date) = 1 then count(numero lancement) else 0 end,
case when month(date) = 2 then [nombre d'article par jours pour chaque jour dans le mois] else 0 end,
case when month(date) = 2 then count(numero lancement) else 0 end,
etc ...
from lancement
group by machine, famille, date
)

select machine, famille, sum(jan)/sum(jjan) as janvier, sum(fev)/sum(fev) as fevrier, etc...
from tabtemp
group by grouping sets(machine, (machine, famille))



Enfaite je fais une matrice et le la "lisse" avec le sum pour chaque mois

0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
30 mai 2013 à 15:18
J'ai finalement trouvé une alternative car cela n'était pas possible dans la configuration actuelle !

Merci quand même ;-)
0