Veuillez essayer ce qui suit...
SELECT Name,
Street,
StreetNo,
Week,
SUM( CASE
WHEN Total IS NULL THEN
0
ELSE
Total
END ) AS Total
FROM Customers a
JOIN Addresses b ON a.Id = b.CustomerId
RIGHT JOIN Sales c ON b.Id = c.AddressId
GROUP BY a.Name,
c.Week,
b.Street,
b.StreetNo;
J'ai modifié votre déclaration à trois endroits. Le premier est que j'ai changé votre jointure en Sales
à un RIGHT JOIN
. Ceci se joindra comme il le ferait avec un INNER JOIN
mais il conservera également les enregistrements de la table sur le site Web de l'entreprise. droite côté de la JOIN
qui n'ont pas d'enregistrement ou de groupe d'enregistrements correspondants sur la gauche, en plaçant NULL
les valeurs dans les champs de l'ensemble de données résultant qui proviendraient de la gauche de l'ensemble de données. JOIN
. A LEFT JOIN
fonctionne de la même manière, mais avec tous les enregistrements supplémentaires de la table sur le serveur de l'entreprise. gauche en cours de conservation.
J'ai supprimé le mot INNER
de votre survivant INNER JOIN
. Où JOIN
n'est pas précédé d'un type de jointure, un INNER JOIN
est effectuée. Les deux sites JOIN
y INNER JOIN
sont considérées comme correctes, mais le protocole qui prévaut semble être de laisser les INNER
ou lorsque le SGBDR permet de le laisser de côté (ce que fait SQL-Server). C'est à vous de choisir. Je l'ai laissé ici à titre d'exemple.
Le troisième changement est que j'ai ajouté un CASE
qui vérifie si le Total
contient un NULL
ce qui sera le cas s'il n'y a pas eu de ventes pour ce client pendant cette semaine. Si c'est le cas, alors SUM()
retournerait un NULL
donc le CASE
renvoie un 0
à la place. Si Total
ne contient pas de NULL
la valeur SUM()
de toutes les valeurs de Total
pour ce regroupement est effectuée.
Veuillez noter que je suppose que Total
n'aura pas de NULL
des valeurs autres que celles de l RIGHT JOIN
. Veuillez me dire si cette hypothèse est incorrecte.
Veuillez également noter que j'ai supposé que soit il n'y aura pas de manquant. Week
s pour un Customer
dans le Sales
ou que vous n'êtes pas intéressé à les répertorier s'ils existent. Encore une fois, veuillez m'informer si cette hypothèse est incorrecte.
Si vous avez des questions ou des commentaires, n'hésitez pas à poster un commentaire en conséquence.