简体   繁体   English

如何使用表联接将两个查询联接为一个

[英]How do I join two queries into one using table join

This is my first query using table join of two tables sharing the same primary key: 这是我的第一个查询,它使用共享相同主键的两个表的表联接:

select s.Branch_ID, count(s.Branch_ID)  'No. of Staff', BranchName 'Branch Name'
from Sales_Staff s , Branch b
where s.Branch_ID = b.Branch_ID
group by s.Branch_ID, BranchName
order by 2 desc

这是输出的图像

This is the second query: 这是第二个查询:

select p.Branch_ID, BranchName, Count(p.Branch_ID) 'Frequency of Packages bought'
from Payment p, Branch b
where p.Branch_ID = b.Branch_ID
Group by p.Branch_ID, BranchName

这是第二个的样子

Now, the output for both was what I expected and wanted. 现在,两者的输出都是我期望和想要的。 However when I use the same method to join those two queries, the numbers are wrong. 但是,当我使用相同的方法来连接这两个查询时,数字是错误的。

select p.Branch_ID, BranchName, Count(p.Branch_ID) 'Frequency of Packages bought', count(s.Branch_ID) 'No. of Staff'
from Payment p, Sales_Staff s, Branch b
where p.Branch_ID = s.Branch_ID
and s.Branch_ID = b.Branch_ID
Group by b.Branch_ID, p.Branch_ID, BranchName

Incorrect Output 输出错误 输出错误

Any help would be appreciated. 任何帮助,将不胜感激。

Need to do the two group by's separately as you are getting many to many joins - every staff for every payment for each branch. 由于您要加入很多对许多人-每个员工为每个分支机构支付的费用,因此需要分别进行分组。

select  b.BranchID, b.BranchName, isnull(s.StaffCount,0) as StaffCount, isnull(p.PackageCount,0) as PackageCount
from    Branch b
left join (select Branch_ID, count(*) as StaffCount from SaleStaff group by Branch_ID) s on s.Branch_ID = b.Branch_ID
left join (select Branch_ID, count(*) as PackageCount from Payment group by Branch_ID) p on p.Branch_ID = b.Branch_ID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM