Особый случай для группы путем подсчета - PullRequest
0 голосов
/ 27 июня 2019

Меня попросили сообщить количество платежей, которые провайдер имеет за текущий месяц. Текущие критерии один код означает один заряд. У меня сейчас проблема в том, что они добавили исключение для одного из провайдеров; при этом если коды, начинающиеся с буквы F или заканчивающиеся буквой G и имеющие 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

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Вы можете попробовать с этим ниже код 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
0 голосов
/ 27 июня 2019

Это функциональный код, который будет делать то, что вам нужно, и это первый подход, который я бы выбрал.По сути, вы суммируете свои исключения и стандартные случаи отдельно, затем применяете свои корректировки исключений и складываете вместе два значения.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...