簡體   English   中英

如何過濾出至少出現一次值的組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM