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 :

ISNULL marche pas


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 150
    Points : 67
    Points
    67
    Par défaut ISNULL marche pas
    bojour pourqoui j'ai pas un zero a la place de null dans la colone total_mandater meme si j'utilise la fonctionne ISNULL


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT     NE.nature_engagement, EE.n_nature_engagement, EE.montant_engager, SUM(CASE WHEN DATALENGTH(COALESCE(ME.n_certification2, ''))  = 0 THEN 0 ELSE ISNULL(ME.montant, 0) END) AS modification_engager, EE.montant_engager + SUM(CASE WHEN DATALENGTH(COALESCE (ME.n_certification2, '')) = 0 THEN 0 ELSE ISNULL(ME.montant, 0) END)  AS total_engager,             
    (
    SELECT     SUM(ISNULL(montant_mandater, 0)) AS total_mandater FROM          dbo.etat_mandatement AS EM
    WHERE      (EE.id2 = id2) AND (date_emis_mandatement NOT LIKE '')
     GROUP BY id2
    ) AS total_mandater
    FROM    dbo.etat_budget AS EB INNER JOIN dbo.etat_engagement AS EE ON EB.id1 = EE.id1 INNER JOIN dbo.nature_engagement AS NE ON EE.id_nature_engagement = NE.id_nature_engagement INNER JOIN dbo.rubrique_budgetaire AS RB ON EB.id_rubrique = RB.id_rubrique LEFT OUTER JOIN
    dbo.modification_engager AS ME ON EE.id2 = ME.id2
    WHERE   (EE.n_certification NOT LIKE '')
    GROUP BY NE.nature_engagement, EE.n_nature_engagement, EE.montant_engager, EE.id2

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    ISNULL s'applique à une valeur ou expression. Encore faut-il que la dite valeur ou expression existe réellement !
    Dans ton cas total_mandater est calculé par une sous-requête. Les fonctions IsNull sont utilisées à l'intérieur de la sous requête.
    Lorsque lorsque la sous requête ne retourne aucun enregistrement (ensemble vide) , tes fonctions ISNULL ne s'applique à rien, puisque la sous requête retourne un ensemble vide
    Donc pour obtenir, dans la colonne total_mandater, la valeur 0 (zéro) à la place de Null, il faut appliquer ISNULL à la sous la sous requête elle même, et ce comme indiqué dans la requête modifiée ci-dessous :

    Code SQL : 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
    SELECT NE.nature_engagement, EE.n_nature_engagement, EE.montant_engager, 
           SUM(CASE WHEN DATALENGTH(COALESCE(ME.n_certification2, ''))  = 0 THEN 0 ELSE ISNULL(ME.montant, 0) END) AS modification_engager, 
           EE.montant_engager + SUM(CASE WHEN DATALENGTH(COALESCE (ME.n_certification2, '')) = 0 THEN 0 ELSE ISNULL(ME.montant, 0) END)  AS total_engager,             
    ISNULL( ( SELECT SUM(ISNULL(montant_mandater, 0)) AS total_mandater
       FROM  dbo.etat_mandatement AS EM
       WHERE (EE.id2 = id2) AND (date_emis_mandatement NOT LIKE '')
       GROUP BY id2 ),0 ) AS total_mandater
    FROM dbo.etat_budget AS EB 
    INNER JOIN dbo.etat_engagement AS EE 
      ON EB.id1 = EE.id1 
    INNER JOIN dbo.nature_engagement AS NE 
      ON EE.id_nature_engagement = NE.id_nature_engagement 
    INNER JOIN dbo.rubrique_budgetaire AS RB 
       ON EB.id_rubrique = RB.id_rubrique 
    LEFT OUTER JOIN dbo.modification_engager AS ME 
    ON EE.id2 = ME.id2 
    WHERE   (EE.n_certification NOT LIKE '')
    GROUP BY NE.nature_engagement, EE.n_nature_engagement, EE.montant_engager, EE.id2

    A+

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 150
    Points : 67
    Points
    67
    Par défaut
    merci bien
    @+

Discussions similaires

  1. [2008] La fonction ISNULL ne marche pas
    Par phenomeno dans le forum SSIS
    Réponses: 8
    Dernier message: 01/06/2011, 17h04
  2. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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