Mam tabelę "Zdarzenia" i tabelę "Gniazda", gdzie Slots.SlotID = Events.MainSlot OR Events.ExtraSlot.Dwa zapytania SUM razem
potrzebne do sumy liczby „Uczestników” dla każdego przedziału czasowego (w MainSlot, jak ExtraSlot - ExtraSlot opcjonalnie)
Tabela "wydarzeń"
ID------Name----------MainSlot-------ExtraSlot-------Attendees
1-------Event1--------1 -------------n/a-------------20
2-------Event2--------1 -------------n/a-------------20
3-------Event3--------2 -------------n/a-------------40
4-------Event4--------2 -------------3---------------20
5-------Event5--------3 -------------4---------------40
6-------Event6--------3 -------------4---------------20
7-------Event7--------3 -------------4---------------10
Tabela "gniazdo"
SlotID--- Slot
1-------- 9.00-9.30
2-------- 9.30-10
3-------- 10.30-10.30
4-------- 10.30-11
Gdybym zapytania do bazy oddzielnie w następujący sposób:
SELECT s.Slot, s.SlotID, ISNULL(SUM(e. Attendees), 0) AS Attendees1
FROM Slots AS s
LEFT OUTER JOIN Events AS e ON e.MainSlot = s.SlotID
GROUP BY s.Slot, s.SlotID
... albo:
SELECT s.Slot, s.SlotID, ISNULL(SUM(x.Attendees), 0) AS Attendees2
FROM Slots AS s
LEFT OUTER JOIN Events AS x ON x.ExtraSlot = s.SlotID
GROUP BY s.Slot, s.SlotID
otrzymuję następujący odpowiednio:
SlotID ------ Attendees1
1------------- 40
2------------- 60
3------------- 70
4------------- 0
SlotID ------- Attendees2
1------------- 0
2------------- 0
3------------- 20 *correct
4------------- 70
Oba wyniki są prawidłowe.
Jednak jeśli kładę dwa zapytania razem coś jest nie tak, jak pokazuje tabela poniżej
SELECT s.Slot, s.SlotID, ISNULL(SUM(e.Attendees), 0) AS Attendees1,
ISNULL(SUM(x. Attendees), 0) AS Attendees2
FROM Slots AS s LEFT OUTER JOIN
Events AS e ON e.MainSlot = s.SlotID LEFT OUTER JOIN
Events AS x ON x.ExtraSlot = s.SlotID
GROUP BY s.Slot, s.SlotID
SlotID------------- Attendees1---------- Attendees2
1-------------------40-------------------0
2-------------------60-------------------0
3-------------------70------------------60 *wrong
4-------------------0-------------------70
Co robię źle? Dzięki za pomoc!
Jakiej bazy danych używasz? –
Dlaczego po prostu nie zrobić dwóch podselekcji, sumując te wyniki razem. –
Witam, używam SQLServer. James, Jak to zrobić? –