Подсчет клиентов по-разному - нужен ли SubQuery? - PullRequest
4 голосов
/ 07 января 2012

Спасибо, что нашли время прочитать мой вопрос.

Представьте себе ситуацию, когда клиенту предоставляется бесплатный подарок, если он открывает счет.Некоторые «клиенты» открывают счет, чтобы получить бесплатный подарок, но никогда не добавляют деньги на свой счет.Открытые счета других клиентов, получить бесплатный подарок, а также пополнить свои счета, добавив на него деньги.

Мне нужно сравнить накопительные счета с общим количеством всех клиентов.

Вещисначала это выглядело довольно просто ...

 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

Что-то говорит мне, что мне нужно использовать подзапрос, но после поиска в Google нескольких страниц.Подзапросы сбивают меня с толку.

Могу я попросить о помощи, пожалуйста?Можете ли вы показать мне, как написать подзапрос, чтобы получить нужные мне результаты.

С уважением, Джон.

PS - Моя таблица аудита содержит следующие поля: Audit_ID, Audit_Date, NickName,CurrGBP и я использую MS Access 2010.

Ответы [ 2 ]

4 голосов
/ 07 января 2012

Не могу вспомнить, если доступ поддерживает регистр; или если 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

РЕДАКТИРОВАТЬ, не хватает некоторых запятых в выборках.

0 голосов
/ 07 января 2012

попробуйте это:

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
...