![](/img/trans.png)
[英]MySQL Group By: How exclude group if at least one row contain value?
[英]How do I filter out a group where there is at least one occurrence of a value?
在下面的示例数据中,我只需要通过caseid_i显示ContactType不等于 'CLOSR' 的记录,但在下面的代码中,它使用 CLOSR 过滤掉任何内容,但不通过 CaseID_I 过滤掉任何内容。 因此,如果 Caseid_i 中的至少一个具有“CLOSR”的 ContactType,我需要过滤掉整个 CaseID。 因此,对于 CaseID_i 51709,caseid_i 根本不会出现在我的结果中,因为至少有一个“ContactTypes”是 CLOSR,而 51715 也是如此。
SELECT C.[cdcpincid_c]
,I.[caseid_i]
,I.echono_c
,C.[close_d] AS ClosureDate
,C.[clinician_c] AS ClosureClinician
,N.[contacttyp_c] AS ContactType
,SC.StaffName AS ClosureStaffName
,I.Refdate_d
FROM [cd].[tb_cdcp_case] C
INNER JOIN [cd].[tb_cdcp_incident] I ON I.[uniqueid_c] = C.[cdcpincid_c]
INNER JOIN [cd].[tb_cdcp_clientcontact] N ON I.[uniqueid_c] = N.[cdcpincid_c]
LEFT OUTER JOIN [dbo].[vCDCP_Staff] SC ON C.clinician_c = SC.Staffcode_c
GROUP BY C.[cdcpincid_c]
,I.[caseid_i]
,I.echono_c
,C.[close_d]
,C.[clinician_c]
,N.[contacttyp_c]
,SC.StaffName
,I.Refdate_d
HAVING sum(CASE
WHEN N.[contacttyp_c] = 'CLOSR'
THEN 1
ELSE 0
END) = 0
AND C.[close_d] IS NOT NULL
AND I.echono_c <> 'OC'
从where
子句中删除条件并将其切换为having
子句:
having sum(case when ContactType = 'CLOSR' then 1 else 0 end) = 0
编辑:
我知道了。 您正在为每个caseid
返回多行。 在这种情况下,也可以使用窗口函数:
having sum(sum(case when ContactType = 'CLOSR' then 1 else 0 end)) over (partition by caseid) = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.