Requete SUM Avec des Null

Résolu
Djzlouk
Messages postés
70
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
20 janvier 2011
- 27 nov. 2008 à 17:04
EricSQL
Messages postés
33
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
24 février 2011
- 30 nov. 2008 à 13:41
Bonjour,

J'ai une question relativement simple, je fais un requete comme cela :

SELECT     Calendar.CodeHeures, Affaire.NumAffaire, SUM(Calendar.Temps) AS Temps
FROM         Affaire INNER JOIN
                      Calendar ON Affaire.IdAffaire = Calendar.IdAffaire
GROUP BY Calendar.CodeHeures, Affaire.NumAffaire

et je recupere tous les numéro d'affaires qui vont bien avec leurs montant en face.
Il se trouve que j'ai  des NumAffaire qui sont NULL, et j'aimerais bien récupérer la somme des temps qui sont pour les NumAffaire NULL.

Mais je n'y arrive pas.

Pouvez vous m'aider ?

Merci d'avance :)

8 réponses

nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
28 nov. 2008 à 16:52
C'est ta relation qui est dans le mauvais sens.

SELECT     Calendar.CodeHeures, Affaire.NumAffaire, SUM(Calendar.Temps) AS Temps
FROM         Calendar LEFT JOIN
                      Affaire  ON Affaire.IdAffaire = Calendar.IdAffaire
GROUP BY Calendar.CodeHeures, Affaire.NumAffaire

Car les données à prendre en compte sont dans calendar et non affaire
3
nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
27 nov. 2008 à 19:38
Salut

Remplaces le inner join par un LEFT JOIN
0
Djzlouk
Messages postés
70
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
20 janvier 2011

28 nov. 2008 à 09:22
Effectivement il y a un peu de changement avec le LEFT JOIN.

Avec INNER JOIN, j'ai 42 retours alors qu'avec LEFT JOIN J'en ai 125.

Moi ce que j'avais c'etait (Avec INNER JOIN) :
CodeHeures NumAffaire Temps
F, AV8QC9649, 30,4, ----
D, DA3QF1694, 3, ----
K, DA3QF1694, 7,6

Ce que j'ai avec LEFT c'est :
F, AV8QC9649, 30,4, ----
D, DA3QF1694, 3, ----
K, DA3QF1694, 7,6, ----
NULL, Total - 2008, NULL

Donc des champs null dans le CodeHeures

Et j'aimerais en réalité juste les lignes de plus qui sont en liaison avec un numAffaire NULL (Qui est une condition dans le JOIN... grace au ON)
Ce que j'aimerais serai donc de la forme :
F, AV8QC9649, 30,4, ----
D, DA3QF1694, 3, ----
K, DA3QF1694, 7,6, ----
AB, NULL, 60, ----
CP, NULL, 56,2
0
nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
28 nov. 2008 à 13:14
J'ai pas trop compris, ce qui tu voulais de plus.

Peux-tu mettre la contenu des deux tables 5 - 6 lignes avec les différents cas possible
et le résultat obtenu et celui attendu (comme dans ton précédent post)

Car il me manque les tables sources pour comprendre ou est le problème.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Djzlouk
Messages postés
70
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
20 janvier 2011

28 nov. 2008 à 13:20
Alors,
Table Calendar :
IdCalendar    int
IdAffaire    int
Temps    float    Unchecked

Table Affaire :
IdAffaire    int
NumAffaire    nvarchar(MAX)

Et il existe une relation entre les IdAffaire. Mais de temps en temps je crée une ligne dans calendar avec un IdAffaire NULL (c'est fait expres) mais je voudrais recuperer ces elements.

voila
0
Djzlouk
Messages postés
70
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
20 janvier 2011

28 nov. 2008 à 19:28
Hummmmmm,

C'est peut etre ca. Je savais pas que l'odre du 'From' avait une grande importance.

Je peux pas tester tout de suite.
Je valide la réponse dès que je peux vérifier :p

Merci en tout cas de la proposition. :)
0
nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
28 nov. 2008 à 19:35
Si dans le cas de left join
mais pas dans le cas de l'inner join

left join

null - null --> null
null - valeur --> null
valeur - null --> valeur
valeur - valeur --> valeur

inner join

null - null --> null
null - valeur --> null
valeur - null --> null
valeur - valeur --> valeur

right join

null - null --> null
null - valeur --> valeur
valeur - null --> null
valeur - valeur --> valeur
0
EricSQL
Messages postés
33
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
24 février 2011

30 nov. 2008 à 13:41
Ce n'est pas un problème de jointure externe car le NULL ne porte pas sur le filtre !

Change ton group by :

group by case when Affaire.NumAffaire is not null then Calendar.CodeHeures end, Affaire.NumAffaire


/Eric
0