Sql 以不同的方式统计客户-我需要子查询吗?

Sql 以不同的方式统计客户-我需要子查询吗?,sql,ms-access,subquery,Sql,Ms Access,Subquery,感谢您抽出时间阅读我的问题 想象一下这样一种情况:如果客户开户,他们会得到一份免费礼物。一些“客户”开立账户以获得免费礼物,但从未向其账户中添加任何款项。其他“客户”开立账户,获得免费礼物,并通过向账户中添加资金来为其账户提供资金 我需要将资金账户与所有客户的总数进行比较 事情开始看起来很简单 SELECT Audits.AuditDate, Count(Audits.NickName) AS AllAccounts FROM Audits Group By Audits.AuditDat

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

想象一下这样一种情况:如果客户开户,他们会得到一份免费礼物。一些“客户”开立账户以获得免费礼物,但从未向其账户中添加任何款项。其他“客户”开立账户,获得免费礼物,并通过向账户中添加资金来为其账户提供资金

我需要将资金账户与所有客户的总数进行比较

事情开始看起来很简单

 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-我的审核表包含以下字段:审核ID、审核日期、昵称、CurrGBP,我正在使用MS Access 2010。

记不起Access是否支持case;或者如果IIF是一条路。。。但是有点像

实际上并不需要子查询,您可以在一个查询中获得结果,只需在使用case或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
编辑,在选择中缺少一些逗号。

请尝试以下操作:

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

+一篇非常好的文章,解释并提供很好的细节。一个“经过深思熟虑和解释的问题”谢谢。案例示例不起作用,但IIF起作用。我需要进一步研究这个问题,因为我简化了问题的表字段。。。事实上,我还有另外两个字段(CurrUSD和CurrEUR)需要包含在你的SUM()中,但这确实有所帮助。+1,Johnny可能还值得一看“交叉表查询”功能;特别是当您使用多个列时,这些列可以通过查询设计器生成,并且与Excel透视表的概念相同。@约翰尼:如果您想计算以任何支持的货币提供资金的帐户,只需扩展
IIF
条件,如下所示:
IIF(CurrGBP>0或CurrUSD>0或…
。如果您的主要目标是统计不为空的帐户,我认为这就足够了。@xQBert-通过IIF语句更接近我所需要的。这似乎给了我所需要的一切。。。选择A.AuditDate,将(A.昵称)算作所有账户,将(IIF(A.CurrGBP>0,1,IIF(A.CurrUSD>0,1,IIF(A.CurrEUR>0,1,0))作为A集团审计的资金。AuditDate@AndriyM-辉煌-比我的嵌套IIF更简单、更优雅。谢谢,谢谢johntotetwoo,我还没有试过你的解决方案,但我会试试的。你所做的事很有趣(把桌子连在一起,我没想到你能做到)。