SQL Объединить 2 набора результатов - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть запрос, который получает 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...