MS Access SQL(2010) - 如何“快速”创建基于多个记录的计算列?

时间:2017-09-21 17:56:14

标签: sql ms-access-2010 jet

我的问题是 - 我正在尝试在MS Access中构建数据库/查询,以计算医生执行的医疗程序的适当报销金额。虽然大多数都是“直截了当”,这意味着我可以在一个记录中完成,但一种特定的计费方法并非如此。

当患者在一天内接受多次手术时,他们会接受“多次手术减少” - 手术按照从大多数到最便宜的顺序排列,然后第一次报销为100%,第二次报销50%,第三次和随后的手术25%。个别记录中没有指示进行多次外科手术。

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

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

如果有人能给我一个方法(它不一定必须在一个查询中),这将是伟大的。感谢您的阅读!

1 个答案:

答案 0 :(得分:1)

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

数据中需要的是每位患者的手术程序的每日序列ID。可能能够在查询中使用DCount()域聚合生成,但是对于大型数据集而言,它可能会非常慢,以至于无用。在这种情况下,您唯一的办法可能是在表格中填充序列字段的VBA解决方案。

考虑:

查询1:患者费用
SELECT FeeList.ID AS FeeID,ProcList.ID AS ProcID,ProcList.Pat_Name,ProcList.Procedure,FeeList.Price,FeeList.Surgery,DateSerial(Year([Date_Service]),Month([Date_Service]),Day([Date_Service] ))AS DateSvs,格式([Price]," 00000")& " _" &安培;格式([ProcList]。[ID]," 00000")AS PriceID FROM ProcList INNER JOIN FeeList ON ProcList.Procedure = FeeList.Procedure;

QUERY2:
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,[价格] *开关([手术] = 0或[SurSeq] = 1,1,[SurSeq] = 2,0.5,真,0.25)AS Reimb 来自患者费用 ORDER BY PatientsFees.Pat_Name,PatientsFees.DateSvs,PatientsFees.PriceID DESC;