以不同方式计算客户 - 我是否需要SubQuery?

时间:2012-01-07 14:21:48

标签: sql ms-access subquery

感谢您抽出宝贵时间阅读我的问题。

想象一下,如果客户开设账户,可以获得免费礼品。有些“客户”开设账户以获得免费礼品,但绝不会在账户中添加任何款项。其他“客户”开立账户,获得免费礼品,并通过增加资金为其账户提供资金。

我需要将受资助的帐户与所有客户的总体数量进行比较。

事情起初很容易......

 SELECT Audits.AuditDate, Count(Audits.NickName) AS AllAccounts
 FROM Audits
 Group By Audits.AuditDate

这显然让我每天都会计算所有帐户。

要获得“资助”计数,我会......

 SELECT Audits.AuditDate, Count(Audits.NickName) AS Funded
 FROM Audits 
 WHERE Audits.CurrGBP > 0
 GROUP BY Audits.AuditDate;

这一次,我得到了“资助”帐户的计数。

现在,这就是我被卡住的地方......我想要同一个查询中的两个计数,所以我的结果会像这样......

AuditDate (DD/MM/YYYY)      AllAccounts Funded
01/01/2012                  50          45
02/01/2012                  60          50
03/01/2012                  70          55

有些东西告诉我我需要使用子查询,但在谷歌搜索几页后。子查询对我来说很困惑。

我可以请求帮助吗?你能告诉我如何写一个子查询来给我我需要的结果。

此致 约翰。

PS - My Audits表包含以下字段:Audit_ID,Audit_Date,NickName,CurrGBP,我正在使用MS Access 2010。

2 个答案:

答案 0 :(得分:4)

无法记住访问是否支持案例;或者如果IIF是要走的路......但是像...那样的东西。

实际上不需要子查询,您可以在一个查询中获得结果,只是限制使用案例或IIF时的计数。

Select A.AuditDate,
count (A.NickName) as AllAccounts,
sum(CASE when A.CurrGBP > 0 then 1 else 0 end) as Funded
FROM Audits A
GROUP BY A.AuditDate

如果是IIF

Select A.AuditDate,
count (A.NickName) as AllAccounts,
sum(IIF(A.CurrGBP >0,1,0)) as Funded
FROM Audits A
GROUP BY A.AuditDate

编辑,在选择中缺少一些逗号。

答案 1 :(得分:0)

试试这个:

SELECT  AuditA.AuditDate, 
        Count(AuditA.AllAcounts) as AllAccount,
        iTable.iCount
FROM Audits as AuditA
       INNER JOIN 
           (SELECT AuditB.Audit_ID, COUNT(AuditB.Audit_ID) as iCount
            FROM Audit as AuditB
            WHERE AuditB.CurrGBP > 0) as iTable
       ON AuditA.Audit_ID = iTable.Audit_ID