1

我正在创建一个 Access 2010 数据库来替换旧的 Paradox 数据库。刚刚开始查询,毫无疑问我是 SQL 新手。

我想要做的是设置一个供图表使用的查询。图表的 Y 轴是一个简单的通过百分比,X 轴是某一天。该图表将在表单加载和随后输入的新记录时创建,日期范围为“Between Date() And Date()-30”(30 天,滚动)。

我正在使用的数据库每天可以进行多次检查,多次通过和多次失败。每次检查都是单独的记录。

例如,2012 年 11 月 26 日进行了 7 次检查;5 次通过,2 次失败,接受率为 71% ((5/7)*100%)。“11/26/2012”和“71%”代表图表上的一个数据点。2012 年 11 月 27 日进行了 8 次检查;4 次通过,4 次失败,接受率为 50%。等等。

这是一个查询示例,其中包含日期范围“11/26/2012 - 11/27/2012”的“日期”和“处置”字段:

SELECT Inspection.Date, Inspection.Disposition
FROM Inspection
WHERE (((Inspection.Date) Between #11/26/2012# And #11/27/2012#) AND ((Inspection.Disposition)="PASS" Or (Inspection.Disposition)="FAIL"));

Date       | Disposition
11/26/2012 | PASS
11/26/2012 | FAIL
11/26/2012 | FAIL
11/26/2012 | PASS
11/26/2012 | PASS
11/26/2012 | PASS
11/26/2012 | PASS
11/27/2012 | PASS
11/27/2012 | PASS
11/27/2012 | FAIL
11/27/2012 | PASS
11/27/2012 | FAIL
11/27/2012 | PASS
11/27/2012 | FAIL
11/27/2012 | FAIL

*注意 - 日期字段的类型为“日期”,处置字段的类型为“文本”。有些日子没有进行检查,这些日子不会出现在图表上。检查处置也可以列为“NA”,它指的是另一种不绘制图表的检查。

这是我想在另一个查询中创建的布局(再次,为简洁起见,范围内只有 2 天):

Date       | # Insp | # Passed | # Failed | % Acceptance
11/26/2012 | 7      | 5        | 2        | 71 
11/27/2012 | 8      | 4        | 4        | 50 

我认为需要做的是对记录日期本身和其余查询结果中的“计算字段”进行某种类型的连接。问题是我还没有找到如何按日期“展平”记录并在一个查询中维护检查次数和通过/失败次数的计数。我需要为此进行多层查询吗?我不喜欢将任何查询存储为表格,因为这些数字的唯一用途是图形形式。

我正在考虑在数据库中创建新列,以通过分配 PASS“1”和 FAIL“0”来绕过“Disposition”字段为 Textual,但这似乎是一种逃避。必须有一种方法可以在 SQL 中完成这项工作,只是我还没有找到适用的示例。

谢谢你的帮助!任何意见或建议表示赞赏!带有表单、查询和图表的示例数据库也很有帮助!

4

1 回答 1

0

您可以按 分组Date,然后使用 和 之类的聚合sumcount计算该组的统计信息:

select  Date
,       count(*) as [# Insp]
,       sum(iif(Disposition = 'PASS',1,0)) as [# Passed]
,       sum(iif(Disposition = 'FAIL',1,0)) as [# Failed]
,       100.0 * sum(iif(Disposition = 'PASS',1,0)) / count(*) as [% Acceptance]
from    YourTable
where   Disposition in ('PASS', 'FAIL')
group by
        Date
于 2013-01-04T13:07:22.153 回答