Sql 如何筛选出至少出现一次值的组?
在下面的示例数据中,我只需要显示ContactType不等于caseid_I的“CLOSR”的记录,但下面的代码会过滤掉任何带有CLOSR的内容,而不是caseid_I。因此,如果至少有一个caseid_I的ContactType为“CLOSR”,我需要过滤掉整个caseid。所以对于CaseID_i 51709,这个CaseID_i根本不会出现在我的结果中,因为至少有一个“联系人类型”是CLOSR,而51715也是这样Sql 如何筛选出至少出现一次值的组?,sql,sql-server,Sql,Sql Server,在下面的示例数据中,我只需要显示ContactType不等于caseid_I的“CLOSR”的记录,但下面的代码会过滤掉任何带有CLOSR的内容,而不是caseid_I。因此,如果至少有一个caseid_I的ContactType为“CLOSR”,我需要过滤掉整个caseid。所以对于CaseID_i 51709,这个CaseID_i根本不会出现在我的结果中,因为至少有一个“联系人类型”是CLOSR,而51715也是这样 选择C.[cdcpincid\u C] ,I.[caseid_I] ,I
选择C.[cdcpincid\u C]
,I.[caseid_I]
,I.echono_c
,C.[结束日期]作为结束日期
,C.[临床医生]
,N.[contacttyp_c]作为ContactType
,SC.StaffName作为ClosureStaffName
,I.Refdate\u d
从[cd].[tb\U cdcp\U病例]C
内部联接[cd].[tb\u-cdcp\u事件]I ON I.[uniqueid\u c]=c.[cdcpincid\u]
内部联接[cd].[tb\u-cdcp\u-clientcontact]N在I上[uniqueid\u-c]=N.[cdcpincid\u-c]
左外连接[dbo]。[vCDCP_Staff]SC ON C.临床医生_C=SC.员工代码_C
按C分组[cdcpincid_C]
,I.[caseid_I]
,I.echono_c
,C.[结束]
,C.[临床医生]
,N.[联系方式]
,SC.StaffName
,I.Refdate\u d
有总和(格)
当N.[contacttyp_c]=“CLOSR”
那么1
其他0
结束)=0
并且C[close_d]不为空
和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
我在上面的代码中做了一些更改,以包含having子句,但它仍然会显示至少有一个CLOSR ContactType的CaseID。@Dee。每个
caseid
您的结果集有多行。要获取所有联系人,可以使用窗口功能。
having sum(sum(case when ContactType = 'CLOSR' then 1 else 0 end)) over (partition by caseid) = 0