Не все записи отображаются в результатах SQL

#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 и попробовал то, что вы мне сказали, и это дало мне те же результаты. Запрос не начинается с утверждений, фактически начинается со списка аудиторов, специфичных для этого клиента. Каждому аудитору назначается клиент. Итак, в основном, я получаю список назначенных аудиторов, а затем перехожу оттуда