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 :

Remplacer les champs null


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 115
    Points : 56
    Points
    56
    Par défaut Remplacer les champs null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT  pbm.hotliner    AS Hotliner
        ,   pbm.codegamme   AS Gamme
        ,   COUNT(*)        AS "Nombre d incidents"
        ,   COUNT(*) * 100 / tot.cnt AS Pourcentage
    FROM    problems    AS pbm
        INNER JOIN
        (   SELECT  codegamme
                ,   COUNT(*)    AS cnt
            FROM    problems 
            WHERE   datecloture BETWEEN DATE '2007-09-10' AND DATE '2007-09-15' 
            GROUP BY codegamme
        )   AS  tot
        ON  tot.codegamme = pbm.codegamme
    WHERE   pbm.datecloture BETWEEN DATE '2007-09-10' AND DATE '2007-09-15'
        AND pbm.codegamme NOT IN ('ETU-3270','ETU-ADV','ETU-FIDEL','ETU-MESIR','ETU-PRE')
    GROUP BY pbm.codegamme
        ,   pbm.hotliner
        ,   tot.cnt
    ORDER BY pbm.hotliner
    Je souhaiterais remplacer les champs null de la colonne nombre d'incidents par 0 afin que les lignes s'affichent même quand il n'y a pas de résultats pour pouvoir faire un graphique.
    J'ai essayé de modifier le select en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coalesce (COUNT(*) AS "Nombre d incidents", 0)
    mais çe ne fonctionne pas...

  2. #2
    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 805
    Points
    30 805
    Par défaut
    La syntaxe correcte serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coalesce (COUNT(*), 0) AS "Nombre d incidents"
    Mais je m'étonne que l'expression COUNT(*) puisse retourner 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.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 115
    Points : 56
    Points
    56
    Par défaut
    Ben pour certain hotliner j'ai certaines gammes qui ne s'affichent pas...
    Je teste lundi...

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 115
    Points : 56
    Points
    56
    Par défaut
    En fait c'est plus compliqué que cela.
    Certains Hotliner n'ont pas d'incidents dans plusieurs gamme.
    Comment faire pour les faire apparaître avec un nombre d'incidents à 0 ?

  5. #5
    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 805
    Points
    30 805
    Par défaut
    As-tu une table qui recense les Gammes ?
    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.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 115
    Points : 56
    Points
    56
    Par défaut
    Oui la table s'appelle GAMMES et le champs GAMME de cette table correspond au champs CODEGAMME de la table PROBLEMS.

  7. #7
    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 805
    Points
    30 805
    Par défaut
    Je suppose que tu as aussi une table qui recense les hotliners...
    Il suffit alors simplement d'ajouter les lignes à 0 pour les conjonctions Hotliner/Gamme qui ne sont pas dans la liste des Incidents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
        SELECT  pbm.hotliner    AS Hotliner
            ,   pbm.codegamme   AS Gamme
            ,   COUNT(*)        AS "Nombre d incidents"
            ,   COUNT(*) * 100 / tot.cnt AS Pourcentage
        FROM    problems    AS pbm
            INNER JOIN
            (   SELECT  codegamme
                    ,   COUNT(*)    AS cnt
                FROM    problems
                WHERE   datecloture BETWEEN DATE '2007-09-10' AND DATE '2007-09-15'
                GROUP BY codegamme
            )   AS  tot
            ON  tot.codegamme = pbm.codegamme
        WHERE   pbm.datecloture BETWEEN DATE '2007-09-10' AND DATE '2007-09-15'
            AND pbm.codegamme NOT IN ('ETU-3270','ETU-ADV','ETU-FIDEL','ETU-MESIR','ETU-PRE')
        GROUP BY pbm.codegamme
            ,   pbm.hotliner
            ,   tot.cnt
    UNION ALL
        SELECT  hln.hotliner    
            ,   gam.gamme
            ,   0
            ,   0
        FROM    hotliners   AS hln
            CROSS JOIN
                gammes  AS gam
        WHERE   NOT EXISTS
                (   SELECT  1
                    FROM    problems    AS pbs
                    WHERE   pbs.hotliner = hln.hotliner
                        AND pbs.codegamme = gam.gamme 
                        AND pbs.datecloture BETWEEN DATE '2007-09-10' AND DATE '2007-09-15'            )
    ORDER BY hotliner
    ;
    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.

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 115
    Points : 56
    Points
    56
    Par défaut
    non pas de table hotliner mais une users mais le problème c'est qu'elle n'appartient pas à la même base de données...

  9. #9
    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 805
    Points
    30 805
    Par défaut
    Remplace la table hotliners par une table dérivée extraite de problems, ça devrait fonctionner aussi.
    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.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Un CROSS JOIN serait plus indiqué dans ce cas !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 115
    Points : 56
    Points
    56
    Par défaut
    Bon ben je passe par excel...
    ça m'évite de faire des jointures dans plusieurs bases et de tout ralentir...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 19/10/2010, 14h50
  2. remplacer les valeurs nulles dans une table
    Par jessy212 dans le forum Access
    Réponses: 4
    Dernier message: 28/08/2006, 13h22
  3. mettre des Zero a tous les champ null d'un coup
    Par LesLemmings dans le forum Access
    Réponses: 3
    Dernier message: 14/06/2006, 09h34
  4. Réponses: 3
    Dernier message: 23/12/2005, 16h13
  5. afficher les champs null de deux tables dans un select
    Par poil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/09/2005, 15h05

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