#sql-server #sql-server-2008
#sql-сервер #sql-server-2008
Вопрос:
У меня есть SQL-запрос, который возвращает мне список аналитиков с количеством поданных ими заявок и суммой. Я знаю, сколько аналитиков существует для конкретного клиента (6). Проблема, с которой я сталкиваюсь, заключается в том, что при запуске запроса появляется только 4. Если я закомментирую предложение WHERE (которое возвращает мне определенную сумму для каждого аналитика), я получу всю аналитику, но их суммы будут одинаковыми. Как мне вернуть отсутствующие аналитики? Мне все равно, возвращают ли они 0… на самом деле, это то, что я пытаюсь выяснить вместе с подсчетом и суммами. Любая помощь приветствуется. Вот мой код:
SELECT
a.auditorID,
fName,
COUNT(DISTINCT case when claims.dateon >='20200726' AND claims.dateon <= '20200909' AND entries.errorCode NOT IN('DP','RB','DN','WP','WA','CE','RC','SI','CI','PE','OV') then claims.rID end) as rTotal1,
SUM(case when claims.dateon >= '20200726' AND claims.dateon <= '20200909' AND entries.errorCode NOT IN('DP','RB','DN','WP','WA','CE','RC','SI','CI','PE','OV') then entries.refundDue else 0.0 end) as rate1,
COUNT(DISTINCT case when claims.dateon >='20200726' AND claims.dateon <= '20200909' AND entries.errorCode IN('DP','RB','DN','WP','WA','CE','RC','SI','CI','PE','OV') then claims.rID end) as pTotal1,
SUM(case when claims.dateon >= '20200726' AND claims.dateon <= '20200909' AND entries.errorCode IN('DP','RB','DN','WP','WA','CE','RC','SI','CI','PE','OV') then entries.refundDue else 0.0 end) as payment1
FROM auditors a
INNER JOIN
(
SELECT auditorID, assignments.clientID FROM assignments INNER JOIN assignmentCarriers ac ON ac.acID=Assignments.acID WHERE isAssignment='True' GROUP BY auditorID, assignments.clientID
) tAssignments ON tAssignments.auditorID=a.auditorID
INNER JOIN
(
SELECT clientID, code FROM clients WHERE code='ABBL'
) tClients ON tClients.clientID=tAssignments.clientID
INNER JOIN claims ON claims.client=tClients.code
INNER JOIN entries ON claims.rID = entries.rid
WHERE claims.auditorID=a.auditorID
GROUP BY a.auditorID, fName
ORDER BY fName
Вот что я получаю, когда запускаю код без СУММЫ или количества…
98 User 1
99 User 2
21 User 3
61 User 4
103 User 5
172 User 6
Вот с ограничениями
98 User 1 17 147346.3000 1 9451.1600
21 User 2 0 0.0000 21 182958.5100
61 User 3 5 36970.0000 81 353592.8000
103 User 4 534 319697.5774 58 234350.7900
Комментарии:
1. Я думаю, что в таблице утверждений не все идентификаторы аудиторов. Из-за этого
claims.auditorID=a.auditorID
соединение не работает. И удаление предложения where, дающего вам повторяющиеся записи — это означает, что происходит некоторое перекрестное объединение.2.Здесь помогут некоторые примеры данных. Попробуйте переместить это условие
where
предложения послеclaims
объединения и сделать егоleft join
. Что-то вродеLEFT JOIN claims ON claims.client=tClients.code AND claims.auditorID=a.auditorID
(безwhere
предложения).3. даже если утверждения не содержат аудиторов, как мне их показать? Это важная информация, учитывая, что эти аудиторы не подают претензии.
4. Если утверждения должны отображаться всегда, почему бы не начать с этого?
select * from claims left join auditors on ...
5. @Sanders… итак, я удалил предложение where и попробовал то, что вы мне сказали, и это дало мне те же результаты. Запрос не начинается с утверждений, фактически начинается со списка аудиторов, специфичных для этого клиента. Каждому аудитору назначается клиент. Итак, в основном, я получаю список назначенных аудиторов, а затем перехожу оттуда