Access 2010 - SQL查询 - 计算Iif联合所有错误

时间:2016-01-07 23:08:52

标签: sql ms-access

修改:请在更新下查看以下新信息。

我有一个包含4个表的Access数据库:表1,2,3和4。 每个表有4列:ID,日期,名称和项目。

我正在尝试设计一个Query,它将在Item列中生成一个唯一值的计数,按日期和名称分组。例如,当我运行查询时,它应显示日期,个人姓名以及单词" Apple"的总数。发生在适用的员工的“项目”列中。

我正在使用 Count Iif 来计算出现次数,并使用 Union All 来合并我的表格。 (以下示例代码)

问题:我的查询只提供两个表的计数,而不是全部四个。我无法确定为什么并需要帮助来尝试隔离问题。我现在能够获取信息来计算来自所有四个表的数据(通过从头开始重新创建,叹息)。但是,它现在每桌提供一个总数,我希望它能从所有4个表中提供总计。例如:它向我显示表1的总共1个苹果,表2的2个苹果,表3的3个苹果,当我想要一个查询/报告时,只给我苹果的总数(6) 。我可能会在这里忽略一些东西。

更新我决定使用虚拟信息创建一个全新的数据库并手动重新输入代码(以安抚旧神)并且...它可以工作。这个问题在技术上得到了解决。我现在必须弄清楚为什么它没有给我一个'总计'号。

以下是SQL的一个示例:

SELECT Table1.Date, Table1.Name, Count(IIf([Table1]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table1]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table1]![Item]="Pears",1,Null)) AS CountPears
FROM Table1
GROUP BY Table1.Date, Table1.Name
HAVING (((Table1.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table1.Name) Like [Name]))
UNION ALL
SELECT Table2.Date, Table2.Name, Count(IIf([Table2]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table2]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table2]![Item]="Pears",1,Null)) AS CountPears
FROM Table2
GROUP BY Table2.Date, Table2.Name
HAVING (((Table2.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table2.Name) Like [Name]))
UNION ALL
SELECT Table3.Date, Table3.Name, Count(IIf([Table3]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table3]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table3]![Item]="Pears",1,Null)) AS CountPears
FROM Table3
GROUP BY Table3.Date, Table3.Name
HAVING (((Table3.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table3.Name) Like [Name]))
UNION ALL
SELECT Table4.Date, Table4.Name, Count(IIf([Table4]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table4]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table4]![Item]="Pears",1,Null)) AS CountPears
FROM Table4
GROUP BY Table4.Date, Table4.Name
HAVING (((Table4.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table4.Name) Like [Name]));

1 个答案:

答案 0 :(得分:0)

糟糕!

我做了一些更多的研究,结果证明你的语法很好。所以:

SUM(IIf([Table4]![Item]="Apples",1,0)) AS CountApples

相当于:

Count(IIf([Table4]![Item]="Apples",1,Null)) AS CountApples

无论哪种方式都适用于Access和SQL Server,以及包含空值的字段数据。选择一个而不是另一个的唯一原因是可读性。

所以,这不是一个有用的答案,你应该取消选中它。

(下面的旧答案)

尽管有吸引力,但在这种情况下使用COUNT()将无效。 相反,使用:

SUM(IIf([Table4]![Item]="Apples",1,0)) AS CountApples

这将返回您所追求的正确结果。

PS:使用COUNT([Field])将仅计算[Field]中的非空值,因此您的总体想法是正确的。但是,如您所示,COUNT()不够智能,无法使用IIf()语句执行相同操作。