2013-03-20 66 views
1

我有这个查询来表达一组业务规则。 为了获得我需要的信息,我尝试加入表格本身,但是这会带回比表中实际数量更多的记录。以下是我试过的查询。我究竟做错了什么?自加入带来太多记录

SELECT DISTINCT a.rep_id, a.rep_name, count(*) AS 'Single Practitioner' 
FROM [SE_Violation_Detection] a inner join [SE_Violation_Detection] b 
ON a.rep_id = b.rep_id and a.hcp_cid = b.hcp_cid 
group by a.rep_id, a.rep_name 
having count(*) >= 2 
+0

此违规表是否有一列来指示违规类型?每行是否反映了代表,实践者,产品和违规类型? – 2013-03-20 17:19:00

+0

每一行都反映了代表,从业者和产品。它不反映违规类型。我必须根据数据和业务规则来弄清楚。 – Javi 2013-03-20 17:50:38

回答

1

我想出了一个更简单的方式来获得我需要的一个查询的信息。上面的那个还是错的。

--Rep violation for different HCP more than 5 times 
select distinct rep_id,rep_name,count(distinct hcp_cid) 
AS 'Multiple Practitioners' 
from dbo.SE_Violation_Detection 
group by rep_id,rep_name 
having count(distinct hcp_cid)>4 
order by count(distinct hcp_cid) 
4

您可以用having子句实现这一点:

select a, b, count(*) c 
from etc 
group by a, b 
having count(*) >= some number