Person table
---------------------
|email (pk) | name|
---------------------
|[email protected]| A |
|[email protected]| B |
|[email protected]| C |
Role table
---------------------------------
|Role |Power |
-------------------------------|
|Primary |20 |
|Secondary |10 |
|Supervisor |30 |
--------------------------------
Assignment table
------------------------------------------------------------------
|Team Name| Term | Role |Email |Join_date
------------------------------------------------------------------
|AA |2013_1 |Supervisor |[email protected] |2013-08-05
|BB |2013_1 |Secondary |[email protected] |2013-08-05
|CC |2013_1 |Supervisor |[email protected] |2013-08-05
|DD |2013_1 |Secondary |[email protected] |2013-08-05
|AA |2013_1 |Secondary |[email protected] |2013-08-05
Мой ожидаемый результатподсчета результата запроса
|name | email | num_of_time_pri | num_of_time_sec | num_of_time_sup|
---------------------------------------------------------------------------------------
|A | [email protected]|0 |2 | 1 |
|B | [email protected]|0 |1 | 0 |
|C | [email protected]|0 |0 | 1 |
Учитывая термин, например 2013_1
я должен найти все лицо, которое назначено хотя бы одна роль. И подсчитайте, сколько из каждой роли назначено человеку.
Используя этот запрос:
select
distinct p.name,
p.email
from assignment a,person p
where term ='2013_1' and
a.email = p.email;
предположить, что это возвращает 3 строки, как показано в таблице человек. И оттуда я хочу получить ожидаемую таблицу результатов. Как мне продолжить?
вы можете объяснить мне, как в 'дело when' работает? – root
Просто, если строка имеет роль, которая является «Первичной», она вернет истинное условие, которое равно 1. Затем, используя сумму, она даст общее количество строк, для которых роль равна «Первичная». Итак, «Супервизор» и «Вторичный». – Rigel1121
можно добиться того же результата с помощью 'count()'? я пробовал всевозможные способы. Одна из проблем заключалась в том, что когда человек C, который не был назначен как sec или pri, запрос исключил человека C целиком. – root