微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Microsoft Access 2010 引用列中的元素总和

如何解决使用 Microsoft Access 2010 引用列中的元素总和

我员工的 IT 部门拒绝为我安装 R(声称开源版本存在安全风险),我尝试使用 Microsoft Access 2010 创建报告。

我在医院病房的简单表上创建查询时遇到困难(目的是跟踪数据收集练习):

example table

我没有设法为每个病房分配一个与其床位容量成正比的样本量(上面的第三列),因为我无法参考“bedCapacity”列中元素的总和。使用 Excel,我会尝试这样的操作:

Excel table

Excel 中的单元格 D2 根据公式包含 =INT(C2/SUM(C$2:C$6)*50)+1 和单元格 D3 到 D6。

有什么方法可以参考 Access 2010 中 bedCapacity 列中的总和?我尝试创建一个单独的查询来总结“bedCapacity”列,但是无法弄清楚如何引用该查询中的值。

我正在尝试使用 Access 2010,因此我可以为数据收集器的进度创建标准化报告(这在 Excel 2010 中不容易实现,因为它需要太多的手动操作 - 我尝试了数据透视表等)。

如有任何见解,我们将不胜感激。

解决方法

创建并保存此查询,以便为您提供所有病房的总床位容量。

SELECT Sum(bedCapacity) AS TotalBeds
FROM YourTable;

当然,将 YourTable 替换为您的表的名称。对于这个答案的其余部分,我将假设您使用名称 qryGrandTotalBedCapacity 保存了该查询。

然后你可以在另一个你的表中使用该查询cross join。交叉联接为您提供一个结果集,该结果集将一个数据源的每一行与另一个数据源的每一行配对。

但是,由于 qryGrandTotalBedCapacity 仅返回单行,这相当于使 TotalBeds 值可用于 YourTable 的每一行。而且,从这个起点开始,很容易将您的 Excel 公式转换为等效的 Access SQL。

SELECT
    y.ID,y.ward,y.bedCapacity,(INT((y.bedCapacity/q.TotalBeds) * 50) + 1) AS sampleSize
FROM YourTable AS y,qryGrandTotalBedCapacity AS q;
,

我的 RoundSum 函数会做到这一点:

Public Sub ListSampleSizes(ByVal BedCapacity As Variant,ByVal SampleSum As Long)

    Dim SampleSizes As Variant
    Dim Item        As Long
    
    SampleSizes = RoundSum(BedCapacity,SampleSum)
    For Item = LBound(SampleSizes) To UBound(SampleSizes)
        Debug.Print Item + 1,BedCapacity(Item),SampleSizes(Item)
    Next
           
End Sub

结果:

 1             22            12 
 2             18            10 
 3             20            11 
 4             16            9 
 5             19            11 

此处发布的代码太多,但完整代码可在 GitHub 下载:VBA.Round

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。