Member 12688026 Ответов: 1

Дублирование записей при извлечении с помощью внутреннего соединения в SQL server


Я сталкиваюсь с проблемами, когда получаю записи из SQL. Вывод записей был неправильным, и возвращаемые числа намного больше, чем я ожидал.

Это мой ожидаемый результат :

Count   CustomerTaskTypeId   ScheduledDispatchedDateTime
852             7                      2019-08-20


но вот что я получаю :

Count   CustomerTaskTypeId   ScheduledDispatchedDateTime
4964         7                      2019-08-20


И каковы же причины, по которым я получаю такое большое количество результатов?
Спасибо за помощь. :)

Что я уже пробовал:

Вот мой запрос :

var query= $@"select CAST(CustomerAssignedTaskExec.ScheduledDispatchedDateTime as DATE) as 'Date',
                        CustomerTaskDetails.CustomerTaskTypeId, COUNT(*) as 'Count'
                        from CustomerAssignedTaskExec
                            inner join CustomerAssignedTask on CustomerAssignedTask.Id = CustomerAssignedTaskExec.CustomerAssignedTaskId
                            inner join CustomerTaskDetails on CustomerTaskDetails.Id = CustomerAssignedTaskExec.CustomerTaskDetailsId
                            inner join CustomerAssignedTaskItemStatus on CustomerAssignedTaskItemStatus.Id = CustomerAssignedTaskExec.AssignedTaskItemStatusId
                            inner join customers on customers.CustomerId = CustomerAssignedTask.CustomerId
                            where Customers.StoreId = @storeId and CustomerAssignedTask.TaskStatusId = @runningTaskStatusId
                            group by CAST(CustomerAssignedTaskExec.ScheduledDispatchedDateTime AS DATE), CustomerTaskTypeId, CustomerAssignedTaskItemStatus.Id";

1 Ответов

Рейтинг:
0

Wendelius

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

Возможно, самый простой способ быстро выяснить, что дублируется, - это удалить группировку и включить ключи каждой таблицы в результат. Таким образом, вы можете взглянуть на данные, из которых вы получаете ложные результаты, и поскольку вы знаете данные и структуру таблиц, то легко определить, что такое дополнительные строки. После их нахождения становится легче увидеть проблему в запросе, соединениях, отсутствующей таблице, дополнительном условии отсутствия таблицы и т. д...

Так что попробуйте что-нибудь вроде

select CAST(CustomerAssignedTaskExec.ScheduledDispatchedDateTime as DATE) as 'Date',
   CustomerTaskDetails.CustomerTaskTypeId
   CustomerAssignedTaskExec.*,
   CustomerAssignedTask.*,
   CustomerTaskDetails.*,
   CustomerAssignedTaskItemStatus.*,
   customers.*
from CustomerAssignedTaskExec
   inner join CustomerAssignedTask on CustomerAssignedTask.Id = CustomerAssignedTaskExec.CustomerAssignedTaskId
   inner join CustomerTaskDetails on CustomerTaskDetails.Id = CustomerAssignedTaskExec.CustomerTaskDetailsId
   inner join CustomerAssignedTaskItemStatus on CustomerAssignedTaskItemStatus.Id = CustomerAssignedTaskExec.AssignedTaskItemStatusId
   inner join customers on customers.CustomerId = CustomerAssignedTask.CustomerId
where Customers.StoreId = @storeId 
and CustomerAssignedTask.TaskStatusId = @runningTaskStatusId


Maciej Los

5ed!