Précédent   Forum du club des développeurs et IT Pro > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/01/2013, 13h48   #1
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
Par défaut Grouper Par Mois, Site, en fonction Statut

Bonjour ;
Je cherche à Grouper des cotisations par site, statut et mois
Par exemple
J’ai trois tables Personne, Cotisation, Site

Personne

Nom
Prénom
numSecu
numMatri
Ect..

Pour la cotisation il y a une dure de cotisation donc date de début et et date de fin de cotisation et le statut de la cotisation

Cotisation
Montant
dateDebut (jj/mm/aaaa)
datefin (jj/mm/aaaa)
statut
Ect..

Et enfin la table Site
les cotisations sont collectés au site où la personne est attachés

Site
Non Site
Ect..

Résultat attendu : Nombre de Cotisations par Site par Mois en fonction du Statut (de la Cotisation)

Site Janvier Février Mars Avril Mai Ect.. Décembre
A 5 5 23 4 5 6 4
B 12 8 5 3 5 42 11
C 6 9 6 4 8 3 3


Je sais pas comment mis prendre surtout pour extraire le mois pour information EXTRACT ne marche pas. J’utilise JPQL
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 09h53   #2
islamov2000
Membre chevronné
 
Avatar de islamov2000
 
Homme islamov islamov
Ingénieur d'études & developpement en informatique
Inscription : septembre 2007
Messages : 465
Détails du profil
Informations personnelles :
Nom : Homme islamov islamov
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur d'études & developpement en informatique
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 465
Points : 642
Points : 642
Envoyer un message via Yahoo à islamov2000 Envoyer un message via Skype™ à islamov2000
il faut penser au résulat LIGNES et non pas COLONNES.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Site mois(mm/yyyy) 
A Janvier/2011 
A Février/2011 
A Mars /2011
A Avril /2011
A Mai /2011
Ect.. 
B Décembre/2011
B Janvier /2012
B Février /2012
B Mars /2012
B Avril /2012
B Mai /2012
Ect.. 
B Décembre/2012
....
__________________
d'avoir Pensé à voter positivement pour ceux qui vous ont aidés.
islamov2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h50   #3
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
Merci Pour votre Reponse

Mon Probleme c'est pas l'affichage
Mais c'est surtout comment formuler la requete avec les counts de chaque mois de L'année
Et extraire le mois de la Date et grouper dessus
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 18h42   #4
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
Bonjour;

J'ai fait des choses pour répondre à ma demande
Pour vous dire vrai, je ne suis pas sure du résultat mais pas du tout
Donc je reviens vers vous pour une vérification
Merci

Code :
1
2
3
4
5
SELECT ct.idCotisation, count(ct.statut),ct.statut, monthname(ct.datedeFin) AS  DateFin,st.nomSite,MONTH(ct.datedeFin) AS DateFin 
  FROM Cotisation ct
  INNER JOIN   Personne p ON ct.Cotisation=p.idPersonne
  INNER JOIN   Site st ON st.idSite=p.idSite
  GROUP BY monthname(ct.datedeFin),st.nomSite,ct.statut;
Merci Encore
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 13h10   #5
Snipah
Membre émérite
 
Inscription : août 2008
Messages : 854
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 854
Points : 837
Points : 837
Bonjour,

Citation:
Nombre de Cotisations par Site par Mois en fonction du Statut (de la Cotisation)
A priori vous devez faire votre count sur id_cotisation, et grouper par mois, par site et par statut.
Code :
1
2
3
4
5
6
7
8
9
SELECT 
           monthname(ct.datedeFin) AS  Mois, 
           st.nomSite, 
           ct.statut, 
           count(ct.idCotisation) AS nb_cotisations
  FROM Cotisation ct
  INNER JOIN   Personne p ON ct.Cotisation=p.idPersonne
  INNER JOIN   Site st ON st.idSite=p.idSite
  GROUP BY monthname(ct.datedeFin), st.nomSite, ct.statut;
Snipah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h29   #6
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
Bonjour
Merci pour la Reponse
J'arrive à afficher les donnés mais mon probleme
c'est d'afficher tout les mois même si il ya pas de cotisations
Exemple

Encore Merci
Images attachées
Type de fichier : jpg Imge.jpg (38,9 Ko, 6 affichages)
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h40   #7
aieeeuuuuu
Expert Confirmé
 
Inscription : janvier 2010
Messages : 1 699
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 699
Points : 2 678
Points : 2 678
Bonjour,

Pour cela, vous pouvez faire une jointure externe sur des tables mois.

SQLPro a ecrit un article à ce sujet : http://sqlpro.developpez.com/cours/gestiontemps/#L3
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h41   #8
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 877
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 877
Points : 11 763
Points : 11 763
Tu cherches donc à afficher des informations qui n'existent pas dans ta table (des mois sans cotisation) ?
Et où ton SGBD les trouverait-il alors ?

Il te faut une table calendrier (avec au moins la liste des mois) sur laquelle tu feras une jointure externe.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises
[code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 17h17   #9
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
Merci
En Base j'ai pas une table Calendar
j'utilise jsf pour choisir mes Dates et les persister
J'espére qu' on pouvez jouer sur la date de fin pour afficher tout les mois
mais je ne sais pas comment
En core Merci
Images attachées
Type de fichier : jpg Calendar.jpg (10,1 Ko, 2 affichages)
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 15h48   #10
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 877
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 877
Points : 11 763
Points : 11 763
En ajoutant à ton modèle une table des mois (numMois, nomMois) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT  mth.nomMois
    ,   sit.nomSite
    ,   cot.statut
    ,   COUNT(cot.idCotisation)     AS nb_cotisations
FROM    Liste_Mois  mth
    CROSS JOIN
        Site        sit
    INNER JOIN
        Personne    prs
        ON  sit.idSite      = prs.idSite
    LEFT JOIN   
        Cotisation cot
        ON  cot.Cotisation  = prs.idPersonne
        AND EXTRACT(MONTH FROM cot.datedeFin) = mth.numMois
GROUP BY 
        mth.nomMois
    ,   sit.nomSite
    ,   cot.statut
;
Tu auras ainsi pour chaque personne et chaque mois une ligne retournée, même s'il n'y a pas de cotisation correspondante.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises
[code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h03.


 
 
 
 
Partenaires

Hébergement Web