簡體   English   中英

按計數分組的特殊情況

[英]Special case for Group By counting

我被要求報告提供商當月收取的費用。 當前的標准是一個代碼意味着一個費用。 我現在遇到的問題是,他們為其中一個提供程序添加了一個例外。 其中,如果以F開頭或以G結尾的代碼在服務的同一天中有1位患者使用4或5個代碼,則它們僅算作3個費用。

For example (Pv2 is the one with the special case)
Prov       Patient       ServiceDate       Code
Pv1          Pt1           1/1/2019        99001
Pv1          Pt2           1/4/2019        99004
Pv1          Pt2           1/2/2019        F0001
Pv2          Pt1           1/1/2019        F0001
PV2          Pt1           1/1/2019        1000G
PV2          Pt1           1/1/2019        F0012
PV2          Pt1           1/1/2019        1003G
PV2          Pt1           1/1/2019        F1100
PV2          Pt2           1/4/2019        99001

該報告應如下所示

Prov         ChargeCount
Pv1            3
Pv2            4

這是我當前的代碼:

Select Prov, Count(Code)
From Table
Group by Prov

所以我的輸出

Prov         ChargeCount
Pv1            3
Pv2            6

這是可以滿足您需要的功能代碼,也是我要采用的第一種方法。 基本上,您將例外情況和標准案例分別合計,然后應用例外情況調整並將兩個值加在一起。

With DataGather as (
    SELECT
        Prov,
        SUM(CASE 
                WHEN Code Like 'F%' Or Code Like '%G' 
                    Then 1
                Else 0
            END
        ) as FGCodes,
        SUM(CASE
                WHEN WHEN Code Like 'F%' Or Code Like '%G' 
                    Then 0
                Else 1
            END
        ) as Codes
    FROM Table
    GROUP BY Prov
    )
SELECT Prov,
    Codes + 
        CASE
            WHEN FGCodes > 3
                THEN 3
            ELSE FGCodes
        END as ChargeCount
FROM DataGather

編輯:

根據您的附加條件,最后一個CASE語句可以重寫為:

    CASE 
        WHEN FGCodes <= 3
            THEN FGCodes
        WHEN FGCodes <= 5
            THEN 3
        ELSE 5
    END as ChargeCount

您可以在CTE代碼下面嘗試使用此功能-

WITH CTE AS
(
    SELECT Prov,Patient, 3 CNT
    FROM your_table
    WHERE YEAR(ServiceDate)  = 2019
    AND MONTH(ServiceDate) = 1
    AND (
        LEFT(Code,1) = 'F' OR RIGHT(Code,1)  = 'G'
    )
    GROUP BY Prov,Patient
    HAVING COUNT(Code) IN (4,5)

    UNION ALL

    SELECT Prov,Patient, COUNT(Code) 
    FROM your_table
    WHERE YEAR(ServiceDate)  = 2019
    AND MONTH(ServiceDate) = 1
    AND (
        LEFT(Code,1) = 'F' OR RIGHT(Code,1)  = 'G'
    )
    GROUP BY Prov,Patient
    HAVING COUNT(Code) NOT IN (4,5)

    UNION ALL

    SELECT Prov,Patient, COUNT(Code) 
    FROM your_table
    WHERE YEAR(ServiceDate)  = 2019
    AND MONTH(ServiceDate) = 1
    AND LEFT(Code,1) <> 'F' 
    AND RIGHT(Code,1)  <> 'G'
    GROUP BY Prov,Patient
)

SELECT Prov, SUM(CNT) ChargeCount
FROM CTE
GROUP BY Prov

輸出是-

Prov    ChargeCount
Pv1     3
PV2     4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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