У меня есть запрос, который получает sum
часов активности пользователя, и у меня также есть запрос, который получает sum
часов активности каждого человека, для которого ТАК c запрошен пользователь.
Например ..
John Doe
запрошено 2 hours
активности для Jane Doe
, Steve Job
и John Doe(Himself)
Steve Job
запрошено 4 hours
активности для John Doe
Итак ... когда John Doe
генерирует отчет о своей деятельности
Отчет должен выглядеть следующим образом ...
| Users | Hours | //JOHN DOE's ACTIVITIES
----------------------------
| John Doe | 6 Hours |--> 2 hrs from his own request + 4 hrs from Steve Job's Request
| Jane Doe | 2 Hours |--> 2 hrs from John Doe's request
| Steve Jobs | 2 Hours |--> 2 hrs from John Doe's request
Вместо этого я получил это .. ..
| Users | Hours | //JOHN DOE's ACTIVITIES
---------------------------
| John Doe | 8 Hours |-->2 hrs from his own request + 4 hrs from Steve Job's Request + (2 hrs again from his own request)
| Jane Doe | 2 Hours |--> 2 hrs from John Doe's request
| Steve Jobs | 2 Hours |--> 2 hrs from John Doe's request
Это должно быть применимо к другим пользователям, отображать все часы их активности (созданные ими или другими пользователями), а также отображать все часы активности пользователей, которых они запросили активность .
По сути, у меня есть сводная таблица, event_table
и event_table_users
declare @hrs as decimal(18,3) = (select sum(hrs) from event_table_users where user_id = @user_id and (date_start between @date_start and @date_end) )
SELECT userID, sum(Hours) from (
SELECT @user_id as userID, @hrs as Hours
UNION ALL
SELECT event_table_user.user_id as userID,
sum(event_table_user.hrs)
FROM event_table INNER JOIN event_table_users ON event_table.id = event_table_user.request_id
WHERE event_table.requested_by = @requested_by
AND (date_start between @date_start and @date_end)
) GROUP BY userID
SAMPLE DATA
Скажем, их соответствующие user_id
John Doe = 001
, Jane Doe = 002
, Steve Jobs = 003
<!-- event_table -->
ID | user_id | requested_by | hrs |
------------------------------------------------
1 | 002,003,001 | 001 | 2.000 |
2 | 001 | 003 | 4.000 |
<!-- event_table_user -->
ID | request_id | user_id | hrs |
-----------------------------------------
1 | 1 | 002 | 2.000 |
2 | 1 | 003 | 2.000 |
3 | 1 | 001 | 2.000 |
4 | 2 | 001 | 4.000 |
Желаемый результат
| Users | Hours | //JOHN DOE's ACTIVITIES
----------------------------
| John Doe | 6 Hours |--> 2 hrs from his own request + 4 hrs from Steve Job's Request
| Jane Doe | 2 Hours |--> 2 hrs from John Doe's request
| Steve Jobs | 2 Hours |--> 2 hrs from John Doe's request
Фактический результат
| Users | Hours | //JOHN DOE's ACTIVITIES
---------------------------
| John Doe | 8 Hours |-->2 hrs from his own request + 4 hrs from Steve Job's Request + (2 hrs again from his own request)
| Jane Doe | 2 Hours |--> 2 hrs from John Doe's request
| Steve Jobs | 2 Hours |--> 2 hrs from John Doe's request