SQL-запрос для подсчета записей - PullRequest
0 голосов
/ 24 апреля 2018

Я делаю SQL-запрос, который получит все типы транзакций из одной таблицы, а из другой таблицы посчитает частоту этого типа транзакций.

Мой запрос такой:

with CTE as
(
select a.trxType,a.created,b.transaction_key,b.description,a.mode
FROM transaction_data AS a with (nolock)
     RIGHT JOIN transaction_types b with (nolock) ON b.transaction_key = a.trxType 
 )
SELECT COUNT (trxType) AS Frequency, description as trxType,mode
from CTE where created >='2017-04-11' and created <= '2018-04-13'
group by trxType ,description,mode

Таблица transaction_types содержит только все типы транзакций, а transaction_data содержит транзакции, которые произошли.

Проблема, с которой я сталкиваюсь, заключается в том, что, хотя это RIGHT join, он не выбирает все записи из таблицы transaction_types.

Мне нужно выбрать все транзакции из таблицы transaction_types и показать количество отсчетов для каждой транзакции, даже если оно равно 0.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 24 апреля 2018

LEFT JOIN намного легче следовать.

Я думаю, что вы хотите:

select tt.transaction_key, tt.description, t.mode, count(t.trxType)
from transaction_types tt left join
     transaction_data t
     on tt.transaction_key = t.trxType and
        t.created >= '2017-04-11' and t.created <= '2018-04-13'
group by tt.transaction_key, tt.description, t.mode;

Примечания:

  • Используйте разумные псевдонимы таблиц! a и b ничего не значат. t и tt являются аббревиатурами имени таблицы, поэтому за ними легче следовать.
  • t.mode будет NULL для несоответствующих строк.
  • Условие дат должно быть в предложении ON. В противном случае внешнее соединение превращается во внутреннее соединение.
  • LEFT JOIN легче следовать (по крайней мере, для людей, чей родной язык читается слева направо), потому что это означает «сохранить все строки в таблице, которую вы уже прочитали».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...