Прежде всего, выполните более длинный вопрос, но я постараюсь изложить его как можно проще ...
Я пытаюсь написать некий отчетный запрос, но у меня проблема с получением желаемых результатов. Проблема:
Таблица сотрудников
Id | Name
---------------
1 | John Smith
2 | Alan Jones
3 | James Jones
Таблица задач
Id | Title | StartDate | EmployeeId | Estimate (integer - ticks)
----------------------------------------------------------------------------
1 | task1 | 21.08.2011 | 1 | 90000000000
2 | task2 | 21.08.2011 | 1 | 150000000
3 | task3 | 22.08.2011 | 2 | 1230000000
Вопрос:
Как получить сводную смету в день , сгруппированную, но включить всех сотрудников?
Вот так:
Date | EmployeeId | EmployeeName | SummaryEstimate
-------------------------------------------------------------
19.08.2011 | 1 | John Smith | NULL
19.08.2011 | 2 | Alan Jones | NULL
19.08.2011 | 3 | James Jones | NULL
20.08.2011 | 1 | John Smith | NULL
20.08.2011 | 2 | Alan Jones | NULL
20.08.2011 | 3 | James Jones | NULL
21.08.2011 | 1 | John Smith | 90150000000
21.08.2011 | 2 | Alan Jones | NULL
21.08.2011 | 3 | James Jones | NULL
22.08.2011 | 1 | John Smith | NULL
22.08.2011 | 2 | Alan Jones | 1230000000
22.08.2011 | 3 | James Jones | NULL
Что я сейчас делаю, так это то, что у меня есть таблица «даты» с 30 годами дней. Я оставил объединение и группировку по этой таблице, чтобы включить и другие даты. Ну, вот запрос:
SELECT dates.value, employee.Id, employee.Name, sum(task.Estimate)
FROM TableOfDates as dates
left join Tasks as task on (dates.value = convert(varchar(10), task.StartTime, 101))
left join Employees as employee on (employee.Id = task.EmployeeId)
WHERE dates.value >= '2011-08-19' and dates.value < '2011-08-22'
GROUP BY dates.value, employee.Id, employee.Name
ORDER BY dates.value, employee.Id
Преобразование должно получить часть даты столбца DateTime.
Результат, который я получаю:
Date | EmployeeId | EmployeeName | SummaryEstimate
-------------------------------------------------------------
19.08.2011 | NULL | NULL | NULL
20.08.2011 | NULL | NULL | NULL
21.08.2011 | 1 | John Smith | 90150000000
22.08.2011 | 2 | Alan Jones | 1230000000
Я на полпути, я получаю даты, которых нет в двух базовых соединенных таблицах («Сотрудники» и «Задачи»), но я не могу также включить всех сотрудников, как показано в таблице, приведенной ранее.
Я пробовал перекрестное соединение, затем подзапросы, но немного удачи. Любая помощь будет очень высоко ценится ! Спасибо, что нашли время, чтобы пройти через все это, я надеюсь, что я достаточно ясно ...