私は、患者の請求データをデータセットにプルする SQL ストアド プロシージャに取り組んでいます (その後、VB.net アプリケーションに返されます)。
私の問題: 1 人の患者が 1 つの請求期間/アイテムに対してテーブルに複数の行を持っている場合がありますが、行のフィールドのうち 3 つだけが異なります。毎回各行全体をプルしたくありません。最初はすべてのフィールドが必要で、次回は別のフィールドだけが必要です。すべてのレコードを 1 行にまとめたいと思います。
この 1 つの請求期間/アイテムに対して、この患者がテーブルに何行あるのかを事前に知る方法はありませんが、最大は 10 です。
各請求期間/アイテムに固有の患者であるテーブルに claim_id フィールドがあるため、繰り返すことができます (そして、レコードをプルするために使用しているものです)。テーブルには ID 列である ID フィールドもあるため、すべてのレコードで一意です。
私の現在のストアドプロシージャ:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [BillClm]
@ClaimId varchar(20),
@AccountCode integer
AS
SET NOCOUNT ON;
declare @PatientGridTable table
(
Claim_Submitters_Id varchar(20),
Claim_Status_Code varchar(2),
Total_Amount_of_Claim decimal(18,2),
Claim_Payment_Amt decimal(18,2),
Claim_Patient_Resp decimal(18,2),
Claim_Filing_Ind_Code varchar(2),
Payor_Claim_Control_Num varchar(30),
Bill_Type integer,
Claim_Adjustment_Group_Reason_Code varchar(10),
Claim_Adjustment_Amount decimal(18,2),
Claim_Adjustment_Quantity integer,
Patient_Name varchar(60),
Patient_ID_Num varchar(50),
Insured_Name varchar(60),
Insured_ID_Num varchar(50),
Other_Payor_Name varchar(60),
Other_Payor_ID varchar(80),
Other_Subscriber_Name varchar(60),
Other_Subscriber_ID varchar(80),
Covered_Quantity integer,
Covered_Amount decimal(18,2),
Reimbursement_Rate decimal(6,2),
Remark_Code varchar(2500),
Statement_Period_Start_End varchar(25)
)
insert into @PatientGridTable
(
Claim_Submitters_Id,
Claim_Status_Code,
Total_Amount_of_Claim,
Claim_Payment_Amt,
Claim_Patient_Resp,
Claim_Filing_Ind_Code,
Payor_Claim_Control_Num,
Bill_Type,
Claim_Adjustment_Group_Reason_Code,
Claim_Adjustment_Amount,
Claim_Adjustment_Quantity,
Patient_Name,
Patient_ID_Num,
Insured_Name,
Insured_ID_Num,
Other_Payor_Name,
Other_Payor_ID,
Other_Subscriber_Name,
Other_Subscriber_ID,
Covered_Quantity,
Covered_Amount,
Reimbursement_Rate,
Remark_Code,
Statement_Period_Start_End
)
select
d.submitter_id, d.claim_status, d.claim_amt, d.payment_amt,
d.patient_resp, d.claim_ind, d.ref_num, d.bill_type,
(a.adj_group_code+' '+a.adj_reason_code), a.adj_amount,
a.adj_qty, d.patient_name, d.patient_id, d.insured_name,
d.insured_id, d.other_payor, d.other_payor_id, d.other_subscriber,
d.other_subscriber_id, d.days, d.amount, d.percent,
(d.adj_ref+'_'+c.code_text),
(CONVERT(varchar(12), d.claim_start_date, 101)+' '+CONVERT(varchar(12), d.claim_end_date,101))
FROM clm_detail_patient d WITH(NOLOCK)
INNER JOIN code_list c WITH(NOLOCK)
ON d.adj_ref = c.map_id
INNER JOIN clm_adj a WITH(NOLOCK)
ON d.claim_id = a.claim_id
WHERE d.claim_id = @ClaimId
-- -----------------------------------------------------------------------
select * from @PatientGridTable
clm_adj は、0 ~ 10 行を返す可能性のあるテーブルであり、claim_id フィールドを介して clm_detail_patient テーブルに関連付けられています。(clm_detail_patient には常に 1 行しかありません。)
行ごとに異なる clm_adj テーブルの 3 つのフィールドは、Claim_Adjustment_Group_Reason_Code、Claim_Adjustment_Amount、Claim_Adjustment_Quantity です。
私が望むのは、これら 3 つのフィールドが clm_adj の異なる行ごとに 1 行に並んで表示されることです。それを達成する方法がわかりません。
ここに行くより良い方法があれば、一時テーブルを作成することに縛られていません。どんな助けでも大歓迎です!
サンプル clm_detail_patient テーブル データ:
id code amt payment pat_resp clm_ind ref_num bill pat_name pat_id days amount pct adj_ref start_dt end_date claim_id
12345 19 15344.43 14962.12 2456.50 MA 20122580231ABC 213 DOE, JANE 123456789B 0 17418.62 0.00 MA01 2012-10-01 2012-10-31 1234-A00000000000001
12346 19 9157.21 8128.58 289.00 MA 20122580231ABC 212 SMITH, JOHN 987654321B 0 8417.58 0.00 MA01 2012-10-10 2012-10-31 4567-A00000000000001
12347 1 2522.99 1143.66 0.00 MA 20122580231ABC 211 JONES, MARY 987123456B 0 1143.66 0.00 MA01 2012-10-14 2012-10-17 9876-A00000000000001
サンプル clm_adj テーブル データ:
adj reason amt qty claim_id
CO 45 -2074.19 0 1234-A00000000000001
PR 2 2456.50 0 1234-A00000000000001
CO 45 739.63 0 4567-A00000000000001
PR 2 289.00 0 4567-A00000000000001
CO 45 1379.33 0 9876-A00000000000001
各テーブルの最後のフィールドは claim_id です。
したがって、最初の 2 人の患者は clm_adj テーブルに 2 つのレコードを持ち、3 番目の患者は 1 つしか持ちません。
患者 1 に対して現在のストアド プロシージャを実行すると、2 つの行が返されます。初めての患者様にお願いしたいこと
12345 19 15344.43 14962.12 2456.50 MA 20122580231ABC 213 CO 45 -2074.19 0 PR 2 2456.50 0 DOE, JANE 123456789B 0 17418.62 0.00 MA01 2012-10-01 2012-10-31 1234-A00000000000001
したがって、2 つの調整/理由、金額、および数量フィールド レコードが 1 つの行に表示され、隣り合っています (ここでは 9 番目のフィールドの CO 45 から始まります)。