计算同一个表中的列

时间:2013-04-07 17:38:36

标签: sql database vba aggregate-functions column-count

我一直在努力在Access 2007中开发一个现金流量表。使用公式如

可以很容易地在excel中完成
= SUM (B6:M6) / CountIF(B6:M6)>0 

但在谈到访问时,我似乎无法理解这一点。我需要为每个输入数据的公司提供此信息。现金流量表应该是这样的(因为我还不能发布图片):

----------------------------------------------------------------------------------------------------------------
Particulars | Jan | Feb | Mar | Apr | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Average |
Sales---------------------->
Salary------>
Transportation----->

以及该行中约有10个其他项目,所有项目都包含1月至12月的条目,但有时我们需要6个月的数据,有时需要12个月。 (想象一下,基本的Excel工作表包含第一列上的项目和下一个12-13列的标题)。

在访问中,我为每个项目创建了表格,其中列为月份,例如。 tblRcpt - > | rcpt_ID | Jan | Feb | ...依此类推至所有项目的dec。然后,它们将被安排并以条目形式呈现,其形式与上表类似,稍后我将查询并链接它们以呈现完整的现金流量表。

现在问题是,我需要将列平均在一起(正如您在最右边的列中所看到的那样),但我只想将那些已填充的月份平均化(有时在会计人员中输入'0',其中没有数据),所以我不能将列相加并除以12。它必须是动态的,所有函数似乎都围绕计数和平均ROW而不是COLUMNs。

感谢您和我一起阅读并阅读本文,我们将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

试试这个

(Jan + Feb + ... + Dec) /
  ( case when Jan = 0 then 0 else 1 end
  + case when Feb = 0 then 0 else 1 end

  + case when Dec = 0 then 0 else 1 end )
as Avg

答案 1 :(得分:1)

您的表结构应为:

Particulars | Month | Amount
Sales         1       500
Sales         2       1000
Salary        1       80000

......等等。当您没有该月的值时,您可以输入行,或者您可以在SQL语句中处理它们(如下所示):

SELECT Particulars, AVG(Amount) AverageAmount
FROM MyTable
WHERE NULLIF(Amount, 0) IS NOT NULL
GROUP BY Particulars;