Вернуть все строки из левой таблицы - PullRequest
0 голосов
/ 30 марта 2020

Вот что я пытаюсь получить:

Все учетные записи клиентов, даже те, кто не размещал заказы. Настраиваемые параметры

Данные взяты из Sage, поэтому я не могу это изменить.

Все номера счетов клиентов, включая те, которые не разместили заказы. Сумма этих заказов

Критерии: заказы с определенным значением (это будет пользовательский параметр) В течение определенных дат (опять же, пользовательский параметр). Учетные записи не удерживаются (этого нет в Пример кода ниже пока)

В принципе, я хочу получить список всех учетных записей за определенный период времени, которые были потрачены под определенной суммой. Но для этого нужно также включить все учетные записи, которые не разместили заказ.

Я просмотрел различные другие темы здесь и попытался заменить WHERE на AND, но продолжаю получать сообщение об ошибке.

Довольно очевидно, но данные извлекаются из Sage.

Вот код:

SELECT SLCustomerAccount.CustomerAccountNumber, Sum(SLTransactionSummary.InvoiceValue) AS 'Sum of InvoiceValue'
FROM {oj SWA_live2.dbo.SLCustomerAccount SLCustomerAccount LEFT OUTER JOIN SWA_live2.dbo.SLTransactionSummary SLTransactionSummary ON SLCustomerAccount.SLCustomerAccountID = SLTransactionSummary.SLCustomerAccountID}
WHERE (SLTransactionSummary.TransactionDate Between ? And ?)
GROUP BY SLCustomerAccount.CustomerAccountNumber
HAVING (Sum(SLTransactionSummary.InvoiceValue) Between 0 And 50000)
ORDER BY Sum(SLTransactionSummary.InvoiceValue) DESC

1 Ответ

0 голосов
/ 30 марта 2020

Ваше предложение HAVING требует совпадения. Вам также необходимо проверить значения NULL:

HAVING COALESCE(Sum(SLTransactionSummary.InvoiceValue), 0) Between 0 And 50000

В противном случае значение будет NULL при отсутствии совпадений - и BETWEEN вернет NULL, что отфильтровывает строки.

РЕДАКТИРОВАТЬ:

У вас также есть предложение WHERE, которое отменяет LEFT JOIN. Попробуйте эту версию:

SELECT ca.CustomerAccountNumber,
       Sum(ts.InvoiceValue) AS SumnvoiceValue
FROM SWA_live2.dbo.SLCustomerAccount ca LEFT OUTER JOIN 
     SWA_live2.dbo.SLTransactionSummary ts
     ON ca.SLCustomerAccountID = sl.SLCustomerAccountID AND
        ts.TransactionDate Between ? And ?
GROUP BY ca.CustomerAccountNumber
HAVING COALESCE(SUM(ts.InvoiceValue), 0) Between 0 And 50000
ORDER BY Sum(ts.InvoiceValue) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...