我接手了一家医疗诊所的Access 2003数据库管理。不幸的是,创建该数据库的人并不懂很多关于数据库的知识,将所有信息都放入了一个巨大的表中,即All Clinic Data表,其中包含以下字段(以及其他大约40个字段):
这是我目前使用的SQL查询,用于填充我的报告,但如果一个患者的任何预约时间在指定的日期范围内,它就会捕获该患者的所有预约。
如果[输入的开始日期]为2010年5月1日,[输入的结束日期]为2010年5月31日,则我希望我的报告包含以下内容:
PatientID、名字、姓氏、预约日期、第一次预定的妇产科医生、计费项目#1、第二次预约日期、第二次预约原因、第二次预定的妇产科医生、计费项目#2。
我知道这不是最佳的数据安排方式,未来正在计划彻底改造数据库。但是,现在我需要创建仅包含特定日期范围内预约信息的报告。这是我目前使用的SQL查询,用于填充我的报告,但如果一个患者的任何预约时间在指定的日期范围内,它就会捕获该患者的所有预约。
SELECT
Format([Input start date],"mm/dd/yy") & " through " & Format([Input end date],"mm/dd/yy") AS Expr1,
[All Clinic Data].[PatientID], [All Clinic Data].[Last Name],
[All Clinic Data].[First Name], [All Clinic Data].[Appt Date],
[All Clinic Data].[OB at Appt], [All Clinic Data].[Billing Item #1],
[All Clinic Data].[Second Appt Date], [All Clinic Data].[Reason for Second Appt],
[All Clinic Data].[OB at Second Appt], [All Clinic Data].[Billing Item #2]
FROM [All Clinic Data]
WHERE (
(([All Clinic Data].[Appt Date])>[Input start date] And
([All Clinic Data].[Appt Date])<[Input end date])
)
OR
(
(([All Clinic Data].[Second Appt Date])>[Input start date] And
([All Clinic Data].[Second Appt Date])<[Input end date])
)
ORDER BY [All Clinic Data].[Last Name];
注意:输入的起始日期和结束日期是在查询运行时输入的参数。
我尝试使用IIF来删除多余的数据,但我不知道如何构造语句以便仅显示给定日期范围内的预约日期和相关数据(OB和账单项目)。
示例:
1, Sally, Jones, 1/04/2010, Dr.A, 2/05/2011, Dr. B, Flu
2, Jennifer, Baker, 7/05/2010, Dr.X, 15/05/2011, Dr. B, Checkup
3, Joe, Smith, 20/06/2010, Dr.S,
4, Tina, Turner, 17/05/2010, Dr.X, 15/06/2011, Dr. B, Checkup
如果[输入的开始日期]为2010年5月1日,[输入的结束日期]为2010年5月31日,则我希望我的报告包含以下内容:
Sally, Jones,
1. 2/05/2011, Dr. B, Flu
Jennifer, Baker,
1. 7/05/2010, Dr.X
2. 15/05/2011, Dr.B, Checkup
Tina, Turner,
1. 17/05/2010, Dr.X
我希望这些信息足够了解,谢谢您的帮助。
更新1 以下是我尝试Mike下面建议的第一步。我将使用phn作为患者信息的标识符,稍后会获取该信息。但我遇到了编译错误,而我不够精通,不知道哪里出了问题。有什么想法吗?
SELECT
Format([Input start date],"mm/dd/yy") & " through " & Format([Input end date],"mm/dd/yy") AS Expr1,
[All Clinic Data].PHN AS Phn, [All Clinic Data].[Appt Date] AS Date,
[All Clinic Data].[OB at Appt] AS OBName,
[All Clinic Data].[Billing Item #1] AS Billing
FROM [All Clinic Data]
WHERE ([All Clinic Data].[Appt Date]>[Input start date] And [All Clinic Data].[Appt Date]<[Input end date])
UNION
SELECT
Format([Input start date],"mm/dd/yy") & " through " & Format([Input end date],"mm/dd/yy") AS Expr1,
[All Clinic Data].PHN AS Phn, [All Clinic Data].[Second Appt Date] AS Date,
[All Clinic Data].[OB at Second App] AS OBName,
[All Clinic Data].[Billing Item #2] AS Billing FROM [All Clinic Data]
WHERE ([All Clinic Data].[Second Appt Date]>[Input start date] And [All Clinic Data].[Second Appt Date]<[Input end date]);