Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算同一表中的列_Sql_Database_Vba_Aggregate Functions_Column Count - Fatal编程技术网

Sql 计算同一表中的列

Sql 计算同一表中的列,sql,database,vba,aggregate-functions,column-count,Sql,Database,Vba,Aggregate Functions,Column Count,我一直在尝试在access 2007中编制现金流量表。在excel中使用公式(如 = SUM (B6:M6) / CountIF(B6:M6)>0 但是,当涉及到访问时,我似乎无法对这件事保持清醒的头脑。我需要为我们输入数据的每家公司提供这个。现金流量表应该是这样的(因为我还不能发布图片): --------------------------------------------------------------------------------------------------

我一直在尝试在access 2007中编制现金流量表。在excel中使用公式(如

= SUM (B6:M6) / CountIF(B6:M6)>0 
但是,当涉及到访问时,我似乎无法对这件事保持清醒的头脑。我需要为我们输入数据的每家公司提供这个。现金流量表应该是这样的(因为我还不能发布图片):

---------------------------------------------------------------------------------------------------------------- 详情|一月|二月|三月|四月|六月|七月|八月|九月|十月|十一月|十二月|平均| 销售-----------------> 工资------> 交通------> 这一行还有大约10个其他项目,都有1月到12月的条目,然而,有时我们需要6个月的数据,有时需要12个月的数据。(想象一张基本的excel表格,第一列有项目,接下来的12-13列有标题)

在access中,我为每个项目制作了表格,列为月份,例如tblRcpt-->rcpt_ID | Jan | Feb |。。。等等,直到12月,所有的项目。然后,它们将被安排并呈现在一个条目表单中,该表单的设计将类似于上表,而稍后我将查询并将它们链接在一起,以呈现完整的现金流量表

现在问题来了,我需要将这些列平均起来(正如您在最右边的列中所看到的),但我只想将已填充的月份平均起来(有时在会计中,人们在没有数据的情况下输入“0”),因此我不能将这些列相加并除以12。它必须是动态的,所有函数似乎都以计算行数和平均值为中心,而不是列数

谢谢你的耐心和阅读,任何帮助都将不胜感激

试试这个

(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

您的表结构应为:

Particulars | Month | Amount
Sales         1       500
Sales         2       1000
Salary        1       80000
……等等。您可以在没有当月值时不输入行,也可以在SQL语句中处理行(如下所示):


您遇到问题的原因是数据库不是电子表格。您的结构没有规范化,SQL语句也不能很好地处理非规范化的表。当我不得不为每个项目创建这么多单独的表,并为所有项目重复12个月的列时,我知道出了问题。但我不确定你建议的结构是如何运作的?你认为我应该把monhts作为外键吗?我试图在access中实现这一点,因为将有数百个公司的现金流报表需要由前端的几个用户在这里输入。你能详细说明一下吗?我会试试,但是我应该在哪里输入VBA呢?我应该在表单中这样做,然后将结果存储在表中吗?我已经尝试了Case方法,但无法获得正确的语法。所以我用了一个简单的IF,else语句。非常感谢!:-)
Particulars | Month | Amount
Sales         1       500
Sales         2       1000
Salary        1       80000
SELECT Particulars, AVG(Amount) AverageAmount
FROM MyTable
WHERE NULLIF(Amount, 0) IS NOT NULL
GROUP BY Particulars;