Как показывать отчеты только для тех, у кого есть остаток - PullRequest
0 голосов
/ 13 ноября 2018

Я создал отчет по выписке, который извлекает из запроса пару таблиц и группирует их по ClientID и паре сортировок, и каждый клиент размещает свои выписки на отдельной странице с общей суммой задолженности.

Проблема в том, что он показывает клиентов, которые в настоящее время ничего не должны, и я хочу печатать только те заявления, где их суммарный ChargeAmt больше нуля. Кажется, я не могу использовать Итоги с суммой в ChargeAmt, поскольку она просто показывает мне сумму. Даже при повторном добавлении ChargeAmt с параметром GroupBy он будет продолжать отображать только суммированное значение.

SELECT ChargeAccount.ClientID, Sale.SaleNo, Sale.SaleDate, Sale.LastName, ChargeAccount.ChargeAmt, Sale.FirstName, Sale.MI, Sale.StreetAddress, Sale.City, Sale.State, Sale.ZipCode, Sale.SaleTotal, ChargeAccount.ChDate
FROM ChargeAccount INNER JOIN
     Sale
     ON ChargeAccount.SaleNo = Sale.SaleNo
WHERE (((ChargeAccount.ChargeAmt)<>0))
ORDER BY Sale.LastName, ChargeAccount.ChargeAmt DESC; 

Могу ли я добавить функцию SUM, возможно, в предложении HAVING или что-то еще? Я очень новичок в этом, поэтому я прошу прощения, если это простой вопрос.

1 Ответ

0 голосов
/ 13 ноября 2018

Я бы предложил объединить ваш запрос с агрегированным подзапросом, который возвращает ClientID для тех учетных записей, для которых SUM из ChargeAmt не равно нулю.

Это устраняет необходимость в предложении WHERE, поскольку критерии выбора подразумеваются в INNER JOIN:

SELECT 
    ChargeAccount.ClientID, 
    Sale.SaleNo, 
    Sale.SaleDate, 
    Sale.LastName, 
    ChargeAccount.ChargeAmt, 
    Sale.FirstName, 
    Sale.MI, 
    Sale.StreetAddress, 
    Sale.City,
    Sale.State, 
    Sale.ZipCode, 
    Sale.SaleTotal, 
    ChargeAccount.ChDate
FROM 
    (ChargeAccount INNER JOIN Sale ON ChargeAccount.SaleNo = Sale.SaleNo) 
    INNER JOIN
    (
        SELECT t.ClientID
        FROM ChargeAccount t
        GROUP BY t.ClientID
        HAVING SUM(t.ChargeAmt) <> 0
    ) s ON ChargeAccount.ClientID = s.ClientID
ORDER BY 
    Sale.LastName, ChargeAccount.ChargeAmt DESC; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...