我有以下表格:
dbo.Customers :
Id | Name | ...
dbo.CaseTypes :
Id | CustomerId | ...
dbo.CaseTypeDocuments :
Id | CaseTypeId | DocumentId | ...
dbo.Documents :
Id | Name | ...
dbo.Questions :
Id | DocumentId | ...
文档可以有0个或更多问题。案例类型可以包含0个或更多文档。
我想获取客户列表和属于客户的案例类型数量,至少有两个链接到它的文档,每个文档中至少包含一个问题。
所以最终结果应该是这样的:
Customer | CaseTypeCount
Cus1 | 10
Cus2 | 2
我已尝试使用内部联接进行一些查询,这些查询返回错误计数的结果。请建议获得此结果的正确方法。
答案 0 :(得分:0)
Ajinkya,
我认为你看起来像这样:
SELECT c.Name as 'Customer', COUNT(ct.Id) as 'CaseTypeCount' FROM Customers c
JOIN CaseTypes ct ON c.Id = ct.Id
JOIN CaseTypeDocuments td ON ct.Id = td.Id
WHERE td.DocumentId IN
(SELECT d.Id FROM Documents d
JOIN Questions q ON d.Id = q.DocumentId)
GROUP BY c.Name HAVING COUNT(c.Name) >= 2
也许:
SELECT c.Name as 'Customer', COUNT(ct.Id) as 'CaseTypeCount' FROM Customers c
JOIN CaseTypes ct ON c.Id = ct.Id
JOIN CaseTypeDocuments td ON ct.Id = td.Id
JOIN Questions q ON d.Id = q.DocumentId)
GROUP BY c.Name HAVING COUNT(td.DocumentId) >= 2
我希望这会有所帮助......
祝你好运!
答案 1 :(得分:0)
这是家庭作业吗?看起来他们想测试您对HAVING
子句的理解。
要查找至少包含一个问题的文档,您可以使用内部联接:
select
d.*
from
documents d inner join
questions q on
d.id = q.documentID
但要找到包含至少两个文档的caseTypes,您不仅需要inner join
,还需要使用group by
子句限制的HAVING
和HAVING
子句documentID的聚合函数count
,如
select
c.id,
count(d.id)
from
casetype c inner join
documents d on
c.documentid = d.id
group by
c.id
having
count(d.id) > 2