Person table
---------------------
|email (pk) | name|
---------------------
|a@hotmail.com| A |
|b@hotmail.com| B |
|c@hotmail.com| C |
Role table
---------------------------------
|Role |Power |
-------------------------------|
|Primary |20 |
|Secondary |10 |
|Supervisor |30 |
--------------------------------
Assignment table
------------------------------------------------------------------
|Team Name| Term | Role |Email |Join_date
------------------------------------------------------------------
|AA |2013_1 |Supervisor |a@hotmail.com |2013-08-05
|BB |2013_1 |Secondary |a@hotmail.com |2013-08-05
|CC |2013_1 |Supervisor |c@hotmail.com |2013-08-05
|DD |2013_1 |Secondary |a@hotmail.com |2013-08-05
|AA |2013_1 |Secondary |b@hotmail.com |2013-08-05
我的预期结果
|name | email | num_of_time_pri | num_of_time_sec | num_of_time_sup|
---------------------------------------------------------------------------------------
|A | a@hotmail.com|0 |2 | 1 |
|B | b@hotmail.com|0 |1 | 0 |
|C | c@hotmail.com|0 |0 | 1 |
使用此查询
select distinct p.name,p.email from assignment a,person p where term ='2013_1' and a.email = p.email;
假设它返回3行,如person表中所示。从那里,我想得到预期的结果表。我如何从那里继续?
答案 0 :(得分:0)
您应该做的是对RDBMS中的数据进行分组和计数:
SELECT p.name, email, Role, COUNT(a.email)
FROM (Person p CROSS JOIN Role r) LEFT JOIN Assignment a USING (email, Role)
GROUP BY email, Role
然后根据需要在应用程序代码中将其转动。