Jointure : où sont mes mois?

Résolu
finarfin95 Messages postés 19 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 mars 2007 - 14 mars 2007 à 09:29
finarfin95 Messages postés 19 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 mars 2007 - 14 mars 2007 à 14:27
    Bonjour à tous!

J'ai un petit souci de jointure et je fais appel à la collectivité pour m'aclairer un petit peu.

Le contexte est le suivant :
Je possède une vue de structure suivante :
ID (int) - DATE (datetime) - CATEGORIE (varchar) - SOUS-CATEGORIE (varchar) - VALEUR (float)

A partir de cette vue, je voudrais en créer une autre qui me permettrait d'avoir au minimum une valeur par CATEGORIE / SOUS-CATEGORIE par mois/année. Naïvement je me dis qu'en créant une table temporaire avec mes 12 mois je pourrais, via une jointure externe et je ne sais quels artifices, obtenir le résultat recherché, mais je ne vois pas comment...

Merci pour tout conseil que vous pourrez me donner sur le sujet!
Romain

Exemple:

ID   DATE           CATEGORIE   SOUS-CATEGORIE   VALEUR
1      01/01/2006      CAT1                     S-CAT1                  10
2      05/01/2006      CAT1                     S-CAT2                  15
3      27/02/2006      CAT1                     S-CAT1                  20
4      05/05/2006      CAT1                     S-CAT1                  10
5      10/09/2006      CAT1                     S-CAT2                  50
6      19/09/2006      CAT1                     S-CAT2                  10
etc...

Qui  me donnerais:

ANNEE   MOIS   CATEGORIE   SOUS-CATEGORIE   VALEUR
2006         01         CAT1                        S-CAT1                  10
2006         02         CAT1                        S-CAT1                  20
2006         03         CAT1                        S-CAT1                    0
2006         04         CAT1                        S-CAT1                    0
2006         05         CAT1                        S-CAT1                  10
2006         06         CAT1                        S-CAT1                    0
2006         07         CAT1                        S-CAT1                    0
2006         08         CAT1                        S-CAT1                    0
2006         09         CAT1                        S-CAT1                    0
2006         10         CAT1                        S-CAT1                    0
2006         11         CAT1                        S-CAT1                    0
2006         12         CAT1                        S-CAT1                    0
2006         01         CAT1                        S-CAT2                  15

2006         02         CAT1                        S-CAT2                    0

2006         03         CAT1                        S-CAT2                    0

2006         04         CAT1                        S-CAT2                    0

2006         05         CAT1                        S-CAT2                    0

2006         06         CAT1                        S-CAT2                    0

2006         07         CAT1                        S-CAT2                    0

2006         08         CAT1                        S-CAT2                    0

2006         09         CAT1                        S-CAT2                  50 (possibilité de group by si plus simple?)

2006         09         CAT1                        S-CAT2                  10 (possibilité de group by si plus simple?)

2006         10         CAT1                        S-CAT2                    0

2006         11         CAT1                        S-CAT2                    0

2006         12         CAT1                        S-CAT2                    0

2 réponses

finarfin95 Messages postés 19 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 mars 2007
14 mars 2007 à 14:27
Ok quelqu'un m'a donné la solution, c'est un truc du genre :

SELECT M.ANNEE
, M.MOIS
, H.CATEGORIE
, H.SOUS_CATEGORIE
, sum(V.VALEUR)AS TOTAL
FROM
( MOIS AS M
CROSSJOIN
(SELECT C.CATEGORIE
, C.SOUS_CATEGORIE
FROM MATABLE AS C
GROUPBY
C.CATEGORIE
, C.SOUS_CATEGORIE
)AS H
)
LEFTJOIN
MATABLE AS V
ON H.CATEGORIE = V.CATEGORIE
AND H.SOUS_CATEGORIE = V.SOUS_CATEGORIE
AND M.ANNEE = extract(year FROM V.DATE)
AND M.MOIS = extract(month FROM V.DATE)
GROUPBY
M.ANNEE
, M.MOIS
, H.CATEGORIE
, H.SOUS_CATEGORIE
;
 

Avec MOIS  une table temporaire contenant mon calendrier Mois/Années
3
finarfin95 Messages postés 19 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 mars 2007
14 mars 2007 à 09:32
    J'ai oublié de préciser que mes données pouvaient s'étendre sur plusieurs années (contrairement à mon exemple qui se concentre sur 2006).
0
Rejoignez-nous