У меня есть 3 таблицы следующим образом:
- Клиент с идентификатором клиента
- Карты с идентификатором карты и FK с идентификатором клиента
- Транзакции с идентификатором транзакции и FK с идентификатором карты
Каждый клиент может иметь больше, чем карточка, а карточка может совершать больше, чем транзакция.
Я хочу сделать следующее: Получить 3 клиентов с меньшим количеством транзакций.
Моя проблема: мой запрос возвращает клиента 2 раза.
SELECT TOP 3
ClientId, Name, LastName, QtyTrans
FROM
(SELECT
ClientId, Name, LastName, 0 AS QtyTrans
FROM
Client
JOIN
Card ON ClientId = IdClient
WHERE
CardId NOT IN (SELECT CardId FROM Transaction)
GROUP BY
ClientId, Name, LastName
UNION
SELECT
ClientId, Name, LastName, COUNT(TransId) AS QtyTrans
FROM
Client
JOIN
Card c ON ClientId = IdClient
JOIN
Transaction t ON c.CardId = t.CardId
GROUP BY
ClientId, Name, LastName
) TotalTrans
ORDER BY
QtyTrans
Когда у клиента есть транзакции с каждой картой, просто возвращается одна строка, но если у одной из карт нет транзакций, возвращается одна строка с счетом 0, а другая - с суммой транзакций по другим картам.
Результат:
11 Martin Camejo 0,
7 Matias Barrenechea 0,
7 Matias Barrenechea 2
Любая помощь?