Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/07/2011, 12h30   #1
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
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 :
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
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 22h57   #2
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
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 : 177
Points : 413
Points : 413
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 :
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+
__________________
"Une idée mal écrite est une idée fausse !"
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 01h26   #3
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
merci bien
@+
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web