IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Affichage de tous les mois


Sujet :

Langage SQL

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut Affichage de tous les mois
    Salam ; j'ai une requête d'agrégation qui affiche la somme des enregistrement selon les mois extrait des dates d'enregistrement.
    exemple :
    affichage de deux mois
    janvier : 55 || 50
    Février: 20 ||00

    et je veux ce résultat :
    janvier : 55 || 50
    Février: 20 ||00
    Mars : 00 ||00
    Avril: 00 ||00
    .........
    décembre: 00 ||00

    merci

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Tu ne peux pas inventer des dates qui n'existent pas dans tes données.
    Tu dois construire un calendrier afin de pouvoir récupérer tous les mois.
    ~ Lola ~

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ; là il s'agit pas d'inventer mais faire LEFTJOIN mais pas avec une table , je pense a un array ('janvier' ,.......) !!! mais comment l’intégré a la requête principale ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Utilisez une procédure stockée ou une vue (bien que je préfère la solution de lola06)

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par redoran Voir le message
    Re ; là il s'agit pas d'inventer mais faire LEFTJOIN mais pas avec une table , je pense a un array ('janvier' ,.......) !!! mais comment l’intégré a la requête principale ?
    Avec ma solution vous pourriez aussi faire un left join.

    Sinon une solution bien moins bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH t_date IS (
     
    SELECT 'Janvier' Mois FROM DUAL UNION ALL
    SELECT 'Février' Mois FROM DUAL UNION ALL
    ...
     
    )
     
    SELECT *
    FROM MaTableA a
    LEFT OUTER JOIN t_date t
    ON a.mois = t.mois
    ~ Lola ~

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Tu dois construire un calendrier afin de pouvoir récupérer tous les mois.
    vous faite allusion a une table avec idmois (numéro mois) et libellé mois ensuite faire un left join ou autre .

  7. #7
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par redoran Voir le message
    vous faite allusion a une table avec idmois (numéro mois) et libellé mois ensuite faire un left join ou autre .
    Oui exactement. Surtout que tu pourras l'utiliser dans d'autres cas alors que l'autre solution devra être refaite à chaque fois.
    ~ Lola ~

  8. #8
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $cbd->exec("SET lc_time_names = 'fr_FR'");
    $tbord=$cbd->prepare('
    						SELECT MONTHNAME(datedec)AS Mois ,MONTH(datedec)AS nummois, YEAR(datedec) AS Année,sum(m)as m,sum(f)as f,sum(m1)as m1,sum(f1)as f1,
    						sum(m2)as m2,sum(f2)as f2,sum(m3)as m3,sum(f3)as f3,sum(m4)as m4,sum(f4)as f4,sum(m5)as m5,sum(f5)as f5,
    						sum(m6)as m6,sum(f6)as f6,sum(m7)as m7,sum(f7)as f7,sum(m8)as m8,sum(f8)as f8,
    						(sum(m)+sum(m1)+sum(m2)+sum(m3)+sum(m4)+sum(m5)+sum(m6)+sum(m7)+sum(m8)) As Total_M ,
    						(sum(f)+sum(f1)+sum(f2)+sum(f3)+sum(f4)+sum(f5)+sum(f6)+sum(f7)+sum(f8)) As Total_F ,
    						 (sum(m)+sum(m1)+sum(m2)+sum(m3)+sum(m4)+sum(m5)+sum(m6)+sum(m7)+sum(m8)+sum(f)+sum(f1)+
    						 sum(f2)+sum(f3)+sum(f4)+sum(f5)+sum(f6)+sum(f7)+sum(f8)) AS Total
    						FROM `conteneur` 
    						RIGHT JOIN mois ON  MONTH(datedec)= mois.idmois 
    						GROUP BY Année,Mois 
    						ORDER BY datedec ASC ');
    apparemment ça ne marche pas !!!!!

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Pourquoi ça ne marche pas ?
    --> erreur ?
    --> pas de réponse ?
    --> mauvais résultat ?

    Déjà dans un premier temps quelques modifications :
    - RIGHT OUTER JOIN et non RIGHT JOIN

    - GROUP BY incomplet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT MONTHNAME(datedec)AS Mois ,MONTH(datedec)AS nummois, YEAR(datedec) AS Année, [...] 
    FROM `conteneur`                          
       RIGHT OUTER JOIN mois 
       ON  MONTH(datedec) = mois.idmois   
    GROUP BY Année,Mois, nummois 
    ORDER BY datedec ASC
    [EDIT] : correction
    ~ Lola ~

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Ça ne marche pas... c'est un peu vague !

    Quel problème rencontres-tu avec cette requête ?
    Pour pouvoir t'aider, il faudrait qu'elle soit lisible, qu'on sache de quelle table proviennent les colonnes que tu utilises...

    Si datedec vient de conteneur, sa valeur sera nulle pour les lignes de conteneur qui n'ont pas d'équivalent dans mois.
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    hmm non c'est bien un right join qu'il faut faire si on prend la jointure dans ce sens

  12. #12
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par punkoff Voir le message
    hmm non c'est bien un right join qu'il faut faire si on prend la jointure dans ce sens
    Ah oui désolée

    J'ai du mal aujourd'hui, par contre c'est RIGHT OUTER JOIN
    ~ Lola ~

  13. #13
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Merci Lola07 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT MONTHNAME(datedec)AS Mois ,MONTH(datedec)AS nummois, YEAR(datedec) AS Année, [...] 
    FROM `conteneur`                          
       RIGHT OUTER JOIN mois 
       ON  MONTH(datedec) = mois.idmois   
    GROUP BY Année,Mois, nummois 
    ORDER BY datedec ASC
    sa marche mais j'ai pas l'affichage des mois en lettres , j'ai seulement des lignes vides. la table mois est bien renseigné

  14. #14
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    C'est bien ce que je disais... monthname(null) -> null
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    On peut avoir la structure de la table des mois ainsi que son contenu ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par redoran Voir le message
    Merci Lola07 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT MONTHNAME(datedec)AS Mois ,MONTH(datedec)AS nummois, YEAR(datedec) AS Année, [...] 
    FROM `conteneur`                          
       RIGHT OUTER JOIN mois 
       ON  MONTH(datedec) = mois.idmois   
    GROUP BY Année,Mois, nummois 
    ORDER BY datedec ASC
    sa marche mais j'ai pas l'affichage des mois en lettres , j'ai seulement des lignes vides. la table mois est bien renseigné
    Il suffit d'afficher les mois issus de la table mois et non pas de la table conteneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT mois.idmois , mois.nommois, [...] 
    FROM `conteneur`                          
       RIGHT OUTER JOIN mois 
       ON  MONTH(datedec) = mois.idmois   
    GROUP BY Année,Mois, nummois 
    ORDER BY datedec ASC
    ~ Lola ~

  17. #17
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; Lola07
    Il suffit d'afficher les mois issus de la table mois et non pas de la table conteneur.
    effectivement c'était ça qui manquait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT mois.idmois , mois.nommois, [...]
    maintenant j'ai l'affichage voulu
    Al1_24
    C'est bien ce que je disais... monthname(NULL) -> NULL

    maintenant j'ai un problème avec NULL comment les remplacer par des ZEROS pour avoir un affichage type:
    Mois || valeur1 || valeur2
    janvier|| 0 || 02
    février ||5 || 0

  18. #18
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Utilise COALESCE dans la requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  19. #19
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re;Merci CinePhil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT mois.idmois,mois.moi ..... ,COALESCE(NULL,0)
    						FROM `conteneur` 
    						RIGHT OUTER JOIN mois 
    						ON  MONTH(datedec) = mois.idmois 
    						GROUP BY Année,Mois, idmois
    						ORDER BY idmois ASC
    je voie pas mes zéros

  20. #20
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faut que tu utilises COALESCE sur les colonnes susceptibles d'afficher NULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COALESCE(la_colonne, 0)
    => Affiche 0 si la_colonne est à NULL, ce qui peut arriver avec une jointure externe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Affichage de tous les mois courbes
    Par paola2014 dans le forum SSRS
    Réponses: 3
    Dernier message: 11/09/2014, 16h44
  2. [2008R2] Histogramme - Affichage de tous les mois
    Par Melow57 dans le forum SSRS
    Réponses: 1
    Dernier message: 23/06/2014, 11h55
  3. Affichage de tous les mois d'un calendrier
    Par sajodia dans le forum Langage
    Réponses: 4
    Dernier message: 03/03/2011, 14h58
  4. Réponses: 4
    Dernier message: 25/06/2008, 14h57
  5. Réponses: 4
    Dernier message: 31/03/2005, 08h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo