0

クライアント用に維持している Access DB があります。

私は4つのテーブルを持っています。請求、適格性、薬局、およびコード。

私が使用している主キーは PHID + SID = 各テーブルにリンクしている MemberID であり、Codes テーブルは単に説明のために使用されています。それをよりよく視覚化するには、以下のクエリを参照してください...

クエリ 1: Member_Claims_Query

SELECT
Eligibility.GROUPID, 
Eligibility.PHID & '-' & Eligibility.SID AS MemberID, 
[Eligibility].[DOB] AS DOB, 
Eligibility.GENDER, 
Eligibility.RELATIONSHIP_CODE, 
MaxDiagDollars.HighestDiagPaid/SUM(Claims.PAID_AMT) AS ['%'],
MaxDiagDollars.HighestDiagPaid/SUM(Claims.PAID_AMT) as 'Percent',
ROUND(SUM(Claims.PAID_AMT)) AS TOTALPAID,
ROUND(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2011',Claims.PAID_AMT,0))) AS 2011TOTALPAID, 
ROUND(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2012',Claims.PAID_AMT,0))) AS 2012TOTALPAID, 
ROUND(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2013',Claims.PAID_AMT,0))) AS 2013TOTALPAID
FROM (Claims 
INNER JOIN Eligibility 
ON (Claims.[SID] = Eligibility.[SID]) AND (Claims.[PHID] = Eligibility.[PHID])) 
INNER JOIN (SELECT PHID, SID, MAX(TotalPaid) AS HighestDiagPaid 
FROM (SELECT [PHID], [SID], DIAG_CODE1, SUM(PAID_AMT) AS TotalPaid FROM Claims GROUP BY [PHID], [SID], [DIAG_CODE1])  AS [%$##@_Alias] GROUP BY PHID, SID)  AS MaxDiagDollars ON ( MaxDiagDollars.[PHID]=Eligibility.[PHID] ) AND ( MaxDiagDollars.[SID] = Eligibility.[SID] )
WHERE Eligibility.DOB < DateAdd( 'y', -2, DATE())
GROUP BY 
Eligibility.GROUPID, Eligibility.PHID & '-' & Eligibility.SID, [Eligibility].[DOB], Eligibility.GENDER, Eligibility.RELATIONSHIP_CODE, MaxDiagDollars.HighestDiagPaid
HAVING SUM(Claims.PAID_AMT)>10000 and  MaxDiagDollars.HighestDiagPaid/SUM(Claims.PAID_AMT) <= 0.80;

このクエリは、メンバーごとに支払った合計金額を取得し、PAid の合計金額を取得してから、年ごとにブレークアウトすることになっています。

クエリ 2: Member_By_Diag

SELECT 
Eligibility.PHID & '-' & Eligibility.SID AS MemberID, 
Claims.Diag_Code1, 
ROUND(Sum(Claims.PAID_AMT)) AS TotalPaid, 
ROUND(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2011',Claims.PAID_AMT,0))) AS 2011TotalPaid, 
ROUND(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2012',Claims.PAID_AMT,0))) AS 2012TotalPaid, 
ROUND( Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2013',Claims.PAID_AMT,0))) AS 2013TotalPaid
FROM 
(Claims 
INNER JOIN Eligibility 
ON (Claims.[SID] = Eligibility.[SID]) AND (Claims.[PHID] = Eligibility.[PHID])) 
INNER JOIN Pharmacy 
ON (Eligibility.SID = Pharmacy.SID) AND (Eligibility.PHID = Pharmacy.PHID)
GROUP BY 
Eligibility.PHID & '-' & Eligibility.SID,  Claims.Diag_Code1
HAVING count( [Pharmacy].[NDC] ) >4 and count(IIF(Claims.REV_CODE= '450',1,0) ) > 1
ORDER BY Eligibility.PHID & '-' & Eligibility.SID;

2 番目のクエリは、基本的に各メンバーのコードを取得し、診断コードによって支払われた金額を分析することになっています。

クエリ 3: combined_query

SELECT *
FROM (Member_Claims_Query AS a INNER JOIN Member_by_Diag AS b ON a.MemberID=b.MemberID) INNER JOIN Codes AS c ON c.DxCode = b.Diag_Code1;

問題 私のクライアントは、Member_By_Diag クエリの合計支払額が Member_By_Claim クエリの合計支払額よりも高い場合があるという電子メールを送信してきました。それでも、それらは同じ方法で計算されています。

DB を開き、単純なクエリを作成して、b.Total_Paid (Member_By_Diag.Total_Paid) が Member_Claims_Query.Total_Paid よりも大きい場合に返されるレコードの数を確認しました。

これが当てはまる場合、262/1278 レコードが返されました。

SELECT * FROM Combined_Query WHERE b_TotalPaid > a_TotalPaid

この写真は、私がクライアントと一緒に見ているものを正確に説明しています.決定的な結果1

ご覧のように。a_TotalPaid > b_TotalPaid. しかし、私のクエリを調べてみると、それらは同じですか? これは問題ごとのグループですか? または参加の問題?どんな助けでも大歓迎です。

4

2 に答える 2

0

皆さんの回答に感謝します...質問に正確に答えていませんでしたが、Pharmacyの内部結合が問題を引き起こしていました.countを追加したときに、特にHAVING句に関連して使用していました(*)それは実際に私の結果を倍増させていました。例の場合。メンバーに 7 件の請求があり、6 件の薬局レコードが乗算されて 42 件のレコードになり、合計支払額が非常に高くなり、それらは請求自体に関連していませんでした...したがって、最終的な問題です。Member_By_Diag クエリのソリューションは次のとおりです。

    SELECT Eligibility.PHID & '-' & Eligibility.SID AS MemberID, Claims.Diag_Code1, Round(Sum(Claims.PAID_AMT)) AS TotalPaid, Round(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2011',Claims.PAID_AMT,0))) AS 2011TotalPaid, Round(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2012',Claims.PAID_AMT,0))) AS 2012TotalPaid, Round(Sum(IIf(Format(Serv_Beg_Date,'yyyy')='2013',Claims.PAID_AMT,0))) AS 2013TotalPaid, Count(*) AS Expr1
FROM (Claims INNER JOIN Eligibility ON (Claims.[SID] = Eligibility.[SID]) AND (Claims.[PHID] = Eligibility.[PHID])) INNER JOIN ***(SELECT PHID, SID, COUNT(NDC) AS RXCount FROM Pharmacy GROUP BY PHID, SID ORDER BY PHID, SID)  AS Pharmacy*** ON (Eligibility.SID = Pharmacy.SID) AND (Eligibility.PHID = Pharmacy.PHID)
GROUP BY Eligibility.PHID & '-' & Eligibility.SID, Claims.Diag_Code1
***HAVING Count(IIf([Claims].[REV_CODE]='450',1,0))>1***
ORDER BY Eligibility.PHID & '-' & Eligibility.SID;

これにより、ドルがより合理的に見えるようになりました。みんな、ありがとう。

于 2013-08-08T13:12:43.390 に答える