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 :)
A voir également:

8 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
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 Membre Dernière intervention 15 juillet 2011 37
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 Membre Dernière intervention 15 juillet 2011 37
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 Membre Dernière intervention 15 juillet 2011 37
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
Rejoignez-nous