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