MS Access SQL (2010) - 如何创建基于多条记录的计算列 "quickly"?

MS Access SQL (2010) - How to create a calculated column based multiple records "quickly"?

我的问题是这样的 - 我正在尝试在 MS Access 中构建一个 database/query 来计算医生执行的医疗程序的适当报销金额。虽然大部分是 "straightforward",这意味着我可以在一条记录中完成,但一种特定的计费做法却不是。

当患者在一天内接受多次手术时,他们会受到 "Multiple surgery reduction" - 手术按费用从高到低的顺序排列,然后第一个按 100% 报销,第二次手术占 50%,第三次及后续手术占 25%。个人记录中没有迹象表明进行了多次手术。

我正在尝试构建一个查询,无论何时手术是手术,都会检查当天是否进行了任何其他手术,在手术列表中对该手术进行排名,并应用适当的减少。

我原以为子查询可以做到,但我的过程Table 目前有 580,000 条记录并且还在增长,因此执行时间是一个很大的因素。我在以下位置创建了一个简单的定价查询示例: http://sqlfiddle.com/#!9/7254e/9。显然,根据 HIPPA 法律,所有数据都是虚构的。实际情况显然比这要复杂得多,但足以说明我正在纠结的具体问题。

如果有人能给我一个方法(不一定要在单个查询中),那就太好了。感谢阅读!

感谢您提供示例数据,但最好将其作为 tables 直接放在问题中。

数据中需要的是每个患者手术程序的每日序列 ID。可能能够在查询中使用 DCount() 域聚合生成,但对于大型数据集,它可能会太慢以至于无用。在这种情况下,您唯一的办法可能是 VBA 在 table.

中填充序列字段的解决方案

考虑:

查询 1:患者费用
SELECT FeeList.ID AS FeeID, ProcList.ID AS ProcID, ProcList.Pat_Name, ProcList.Procedure, FeeList.Price, FeeList.Surgery, DateSerial(年([ Date_Service]),月([Date_Service]),日([Date_Service])) AS DateSvs, Format([Price],"00000") & "_" & Format( [ProcList].[ID],"00000") AS PriceID FROM ProcList INNER JOIN FeeList ON ProcList.Procedure = FeeList.Procedure;

查询 2:
SELECT PatientsFees.Pat_Name, PatientsFees.DateSvs, PatientsFees.PriceID, PatientsFees.Procedure, PatientsFees.Price, PatientsFees.Surgery, DCount("*","PatientsFees","Pat_Name='" & [PatientsFees].[Pat_Name] & "' AND Surgery = 1 AND DateSvs=#" & [PatientsFees].[DateSvs] & "# AND PriceID>'" & [ PriceID] & "'")+IIf([Surgery]=1,1,0) AS SurSeq, [Price]*Switch([Surgery]=0 Or [SurSeq]=1,1,[SurSeq]=2,0.5 ,True,0.25) AS Reimb 来自患者费用 按 PatientsFees.Pat_Name、PatientsFees.DateSvs、PatientsFees.PriceID 排序;