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

MS SQL Server Discussion :

COUNT(*) = NULL!!!!


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut COUNT(*) = NULL!!!!
    En utilisant l'interface graphique de visual studio 2003 j'ai généré cette requéte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     COALESCE (COUNT(*), 0) AS Expr1
    FROM         FAV_DOC
    GROUP BY UTIL_ID, DOC_ID, DOCV_ID
    HAVING      (UTIL_ID = @user_id) AND (DOC_ID = @doc_id) AND (DOCV_ID = @docv_id)
    la table FAV_DOC a trois champs integers qui forment une clef primaire.
    Si je n'ai pas d'enregistrements qui correspondent aux critéres j'ai un résultat null, sinon ca marche!
    la solution est d' enlever les group by et having et remplacer par des where!
    pourquoi? Dans la doc et les cours SQL Server count ne renvoie jamais null!!!

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    Pourquoi HAVING plutôt que WHERE dans ce cas ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Parceque c'est ce que génére l'interface graphique de génération de query de Visual Studio! mais pourquoi count est null ? pourquoi covalesce (count(*),0) est nul? alors que count ne retourne jamais null d'aprés les docs et infos sur ce site!

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Cela me paraît normal :
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) 
    FROM laTable 
    WHERE Col1 = 2
    Ramène toujours une ligne, puisque le moteur compte le nombre de lignes du résultat engendré par les conditions.

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(*) 
    FROM laTable 
    WHERE Col1 = 2 
    GROUP BY Col2 
    HAVING Col2 = 7
    (avec ou sans le HAVING)
    Ne ramène des lignes que pour les groupes où il y a au moins une ligne vérifiant la condition, s'il n'y en a pas : pas de ligne (et non une ligne avec NULL).

    Il faudrait suggérer de créer (pour la norme SQL2007 ) un GROUP BY ALL Col2, qui renverrait une ligne pour chacune des valeurs de Col2, quelles que soit les conditions du WHERE, mais en tenant compte des conditions du HAVING...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ne ramène des lignes que pour les groupes où il y a au moins une ligne vérifiant la condition, s'il n'y en a pas : pas de ligne (et non une ligne avec NULL).

    donc resultat=0 et non null! d'autre part il semble que coalesce(count(*),0) ne soit même pas evaluer pourquoi?

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je vais être plus clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    col1  col2
    1     1
    2     1
    1     1
    3     2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) as Nombre
    FROM laTable
    WHERE col2 = 3
    le résultat est une ligne avec Nombre = 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT col1, COUNT(*)
    FROM laTable
    WHERE col2 = 1
    GROUP BY col1
    le résultat sera
    Et pas de ligne pour col1 = 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT col1, COUNT(*)
    FROM laTable
    WHERE col2 = 5
    GROUP BY col1
    Le résultat est vide : pas de ligne

    Ce que je voulais dire avec GROUP BY ALL (qui peut se simuler avec une jointure externe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT col1, COUNT(*)
    FROM laTable
    WHERE col2 = 1
    GROUP BY ALL col1
    le résultat serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    col1  Nombre
    1     2
    2     1
    3     0
    Dommage que cela n'existe pas



    Quant à coalesce(count(*),0) il n'est pas évalué car il n'y a pas de ligne dans ton result set, ce n'est pas la même chose qu'une ligne avec NULL.

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

Discussions similaires

  1. count null zero
    Par jilham dans le forum Langage SQL
    Réponses: 13
    Dernier message: 02/07/2007, 15h39
  2. Pas d'affichage des valeurs nulles avec un COUNT
    Par phoenixz22 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 30/05/2007, 18h39
  3. [SQL] Affichage des valeurs nulles dans un Count
    Par at_first dans le forum Access
    Réponses: 4
    Dernier message: 06/03/2007, 11h07
  4. Comment faire un count de colonnes null
    Par claralavraie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/01/2006, 14h13
  5. Afficher le résultat d'un COUNT même null
    Par trangsene dans le forum Langage SQL
    Réponses: 10
    Dernier message: 18/11/2005, 18h07

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