Tôi có bảng "Sự kiện" và một bảng "Slots" trong đó Slots.SlotID = Events.MainSlot HOẶC Events.ExtraSlot.Hai truy vấn SUM cùng nhau
tôi cần phải tổng hợp số lượng “tham dự” cho mỗi khe thời gian (như MainSlot và như ExtraSlot - ExtraSlot là không bắt buộc)
Bảng "Sự kiện"
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
Bảng "Slots"
SlotID--- Slot
1-------- 9.00-9.30
2-------- 9.30-10
3-------- 10.30-10.30
4-------- 10.30-11
Nếu tôi truy vấn cơ sở dữ liệu riêng biệt như sau:
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
... hoặc:
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
tôi nhận được những điều sau đây, tương ứng:
SlotID ------ Attendees1
1------------- 40
2------------- 60
3------------- 70
4------------- 0
SlotID ------- Attendees2
1------------- 0
2------------- 0
3------------- 20 *correct
4------------- 70
Cả hai kết quả là chính xác.
Tuy nhiên nếu tôi đặt hai truy vấn cùng cái gì là sai khi thấy bảng dưới đây
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
Tôi đang làm gì sai? Cảm ơn bạn đã giúp đỡ!
Bạn đang sử dụng cơ sở dữ liệu nào? –
Tại sao không chỉ thực hiện hai lựa chọn, tổng hợp các kết quả đó lại với nhau. –
Xin chào, tôi đang sử dụng SQLServer. James, Làm thế nào để tôi làm điều đó? –