Подсчитать общую сумму транзакций для каждой конкретной строки, даже если 0 - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть 3 столбца, а именно:

  1. Payment Channel
  2. Payment Name
  3. Total Transaction

Total Transaction будет COUNT каждого Payment Channel и Payment Name.

. В Payment Channel значения имеют значение PC01 - PC09.

* 1025.* Я хочу, чтобы мой результат отображал все Payment Channel, даже если нет транзакций.

Вот мой SQL-скрипт:

SELECT
    B2C_BUY_LOG.PG_CHANNEL AS Payment_Channel,
    COMM_CODE.CODE_NAME AS Payment_Name,
    COUNT(B2C_BUY_LOG.PAY_ID) AS Total_Transaction
FROM B2C_BUY_LOG
INNER JOIN B2C_BUY_HIST ON B2C_BUY_LOG.PAY_ID = B2C_BUY_HIST.PAY_ID
INNER JOIN COMM_CODE ON B2C_BUY_LOG.PG_CHANNEL = COMM_CODE.CODE
WHERE B2C_BUY_LOG.RET_CODE = 1
AND B2C_BUY_LOG.PAY_ID LIKE '190220%'
AND COMM_CODE.CODE IN('PC01', 'PC02', 'PC03', 'PC04', 'PC05', 'PC06', 'PC07', 'PC08', 'PC09')
GROUP BY Payment_Channel, Payment_Name;

Вотрезультат моего запроса:

Payment_Channel   Payment_Name    Total_Transaction
PC01              Name-1          14
PC02              Name-2          2
PC03              Name-3          7
PC04              Name-4          9
PC06              Name-6          21
PC08              Name-8          18
PC09              Name-9          95

Этот запрос возвращает только значения совпадения между объединенными таблицами, поскольку это INNER JOIN и PC05 и PC07 отсутствует в результате, потому что у него нет транзакции.Я также пробовал разные JOINS .

Как я могу отобразить PC05 и PC07 со счетом 0 , если нет транзакции?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Используйте левое соединение и перенесите другое условие в положение ON, как показано ниже -

SELECT
    B2C_BUY_LOG.PG_CHANNEL AS Payment_Channel,
    COMM_CODE.CODE_NAME AS Payment_Name,
    COUNT(B2C_BUY_LOG.PAY_ID) AS Total_Transaction
FROM B2C_BUY_LOG
left JOIN B2C_BUY_HIST ON B2C_BUY_LOG.PAY_ID = B2C_BUY_HIST.PAY_ID and B2C_BUY_LOG.RET_CODE = 1 AND B2C_BUY_LOG.PAY_ID LIKE '190220%'
left JOIN COMM_CODE ON B2C_BUY_LOG.PG_CHANNEL = COMM_CODE.CODE
and COMM_CODE.CODE IN('PC01', 'PC02', 'PC03', 'PC04', 'PC05', 'PC06', 'PC07', 'PC08', 'PC09')
GROUP BY Payment_Channel, Payment_Name;
0 голосов
/ 20 февраля 2019

Вы можете попробовать ниже, Проблема с колонкой, к которой применяется фильтр.

SELECT
    B2C_BUY_LOG.PG_CHANNEL AS Payment_Channel,
    COMM_CODE.CODE_NAME AS Payment_Name,
    COUNT(B2C_BUY_LOG.PAY_ID) AS Total_Transaction
FROM B2C_BUY_LOG
left outer JOIN B2C_BUY_HIST ON B2C_BUY_LOG.PAY_ID = B2C_BUY_HIST.PAY_ID
left outer INNER JOIN COMM_CODE ON B2C_BUY_LOG.PG_CHANNEL = COMM_CODE.CODE
WHERE B2C_BUY_LOG.RET_CODE = 1
AND B2C_BUY_LOG.PAY_ID LIKE '190220%'
AND B2C_BUY_LOG.CODE IN('PC01', 'PC02', 'PC03', 'PC04', 'PC05', 'PC06', 'PC07', 'PC08', 'PC09')
GROUP BY Payment_Channel, Payment_Name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...