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,我还没有试过你的解决方案,但我会试试的。你所做的事很有趣(把桌子连在一起,我没想到你能做到)。