sql计数多个表可能的内连接

时间:2015-08-17 17:17:24

标签: sql sql-server

我有一个名为Jobs的表,以及通过JobID连接到Jobs的其他表(地点和时间)。 因此,根据下表,我在SQL服务器中需要以下内容:

Jobs (JobID,Company)

123     ABC

456     DEF

789     GHI


PLACES (Country,JobID)
BR          123
EU          123
CA          456

时间(时间,作业ID)

05          456

08          123

09          789

需要的查询结果:

QRYRESULT(JobID,CountOFPLaces,CountofTimes)

123 ,       2,                      1

456 ,       1 ,                 1

789 ,           ,               1 

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这里的关键是知道使用外连接可以为所有作业提供所有结果,并且计数(不同字段)将为您提供不同的计数,从而消除连接添加的额外计数(假设每条记录都是唯一的并且重复在给定的表中不存在)

SELECT J.jobID, 
    count(Distinct P.Country) as CountOfPlaces, 
    Count(Distinct T.Time) as CountOfTimes
FROM Jobs J
LEFT JOIN Places P
 on J.JobID=P.JobID
LEFT JOIN Times T
 on T.JobID = J.JobID
GROUP BY J.JobID

答案 1 :(得分:0)

select id, pc, pt
from jobs j
left join (select jobid, count(Country) pc from Places group by JobId) p
on j.id = p.JobId
left join (select jobid, count([time]) pt from Times group by JobId) t
on j.id = t.JobId

你应该使用" group by"用于计算具有相同作业ID的行的语句" Places"和"时代"然后加入"乔布斯"表。  我还想关注你应该在join语句中使用子查询,否则你会得到错误的数据。