Я предполагаю, что под "общим числом туров, принадлежащих этому филиалу", вы подразумеваете "общее количество туров, принадлежащих всем филиалам, принадлежащим этому агентству "?
Если это так, вы можете использовать любой из этих подходов.
Подход 1: Используйте только подзапросы, не присоединяйтесь к BranchTbl
:
SELECT dbo.AgencyTbl.AgencyName AS [LIST OF EACH AGENCY],
( SELECT COUNT(*)
FROM BranchTbl
WHERE AgencyID = AgencyTbl.AgencyID
) AS [NO OF BRANCHES],
( SELECT COUNT(*)
FROM dbo.TourTbl
WHERE BranchID IN
( SELECT BranchID
FROM dbo.BranchTbl
WHERE AgencyID = AgencyTbl.AgencyID
)
) AS [NO TOURS EVER]
FROM dbo.AgencyTbl
GROUP
BY AgencyTbl.AgencyName,
AgencyTbl.AgencyID
ORDER
BY AgencyTbl.AgencyName
;
Подход 2: Используйте только объединения, не используйте подзапросы:
SELECT dbo.AgencyTbl.AgencyName AS [LIST OF EACH AGENCY],
COUNT(DISTINCT dbo.BranchTbl.BranchID) AS [NO OF BRANCHES],
COUNT(dbo.TourTbl.BranchTbl) AS [NO TOURS EVER]
FROM dbo.AgencyTbl
LEFT
JOIN dbo.BranchTbl
ON dbo.BranchTbl.AgencyID = dbo.AgencyTbl.AgencyID
LEFT
JOIN dbo.TourTbl
ON dbo.TourTbl.BranchID = dbo.BranchTbl.BranchID
GROUP
BY AgencyTbl.AgencyName
ORDER
BY AgencyTbl.AgencyName
;
Есть несколько других подходов & mdash; например, вы можете присоединиться к BranchTbl
, но использовать SUM(SELECT COUNT(*) FROM ...)
для получения количества туров & mdash; но я думаю, что вышеупомянутое самое ясное.
[Отказ от ответственности: я не проверял ни один из вышеуказанных запросов.]