Проблема с пунктом и количеством транзакций? - PullRequest
0 голосов
/ 27 октября 2019

Я хочу посчитать, сколько транзакций у меня по валюте. Когда я считаю без предложения where, я получаю 0 транзакций, в которых у меня есть значения NULL, но когда я использую предложение where с оператором IN, я получаю отфильтрованный результат, а не нулевые результаты. Как показать 0 в количестве транзакций?

SELECT 
 c.ShortName, 
 count(ad.AccountId) as No_of_transactions
FROM Currency c
LEFT JOIN Account a ON c.id = a.CurrencyId
LEFT JOIN AccountDetails ad ON a.id = ad.AccountId
LEFT JOIN [Location] l ON ad.LocationId = l.Id
LEFT JOIN LocationType lt ON l.LocationTypeId = lt.Id
WHERE lt.Name IN('Region Branch', 'City Branch')
GROUP BY c.ShortName

Вот результат, который я хочу получить:

EUR 31, 
USD 0, 
GBR 0

Ответы [ 3 ]

0 голосов
/ 27 октября 2019

Вы хотите переместить условие в таблице left join ed из предложения where в предложение on соответствующего объединения, чтобы избежать фильтрации записей, когда их нет в этой таблице.

Кроме того, я думаю, что вам нужно COUNT(DISTINCT ad.id) (согласно комментариям, транзакция уникально представлена ​​в этом столбце):

SELECT 
    c.ShortName, 
    COUNT(DISTINCT ad.id) as No_of_transactions
FROM Currency c
LEFT JOIN Account a ON c.id = a.CurrencyId
LEFT JOIN AccountDetails ad ON a.id = ad.AccountId
LEFT JOIN [Location] l ON ad.LocationId = l.Id
LEFT JOIN LocationType lt ON l.LocationTypeId = lt.Id AND lt.Name IN('Region Branch', 'City Branch')
GROUP BY c.ShortName
0 голосов
/ 28 октября 2019
SELECT 
  c.ShortName,
  COUNT(t.Id) as No_of_transations
FROM Currency c
LEFT JOIN Account a ON c.id = a.CurrencyId
LEFT JOIN AccountDetails ad ON a.id = ad.AccountId
LEFT JOIN [Location] l ON ad.LocationId = l.Id
LEFT JOIN (SELECT * FROM LocationType lt WHERE lt.Name IN('Region Branch', 'City 
Branch')) AS t ON l.LocationTypeId = t.Id 
GROUP BY c.ShortName
0 голосов
/ 27 октября 2019

У вас есть LEFT JOIN. Фильтрация должна идти в предложении ON:

SELECT c.ShortName, 
       COUNT(lt.id) as No_of_transactions
FROM Currency c LEFT JOIN
     Account a
     ON c.id = a.CurrencyId LEFT JOIN
     AccountDetails ad
     ON a.id = ad.AccountId  LEFT JOIN
     [Location] l
     ON ad.LocationId = l.Id  LEFT JOIN
     LocationType lt
     ON l.LocationTypeId = lt.Id AND
        lt.Name IN ('Region Branch', 'City Branch')
GROUP BY c.ShortName;

В вашей версии несоответствия превращаются в NULL s, которые отфильтровывают условия WHERE.

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