2012-05-11 20 views
0

Please click here for sample tables and description.情况当+加入+集团以+拥有SQL查询

我有三个表“项目”,“PROJECTMANAGER”和“经理人按照附加图片。

我需要一个查询,它可以列出项目管理的“产品”类型管理器与项目状态分组。 如果STATUS = 2,则显示为已完成项目或正在进行的项目。

结果表应该看起来像附图所示。 所需的结果:http://www.dbasupport.com/forums/attachment.php?attachmentid=588&d=1336691473

查询,我需要的应该是通用的,所以它可以在任何数据库(MySQL的/甲骨文/ MSSQL/DB2)

请指导下使用。

顺便说一句,这不是作业...... !!!! 我用过样品表。

我已经尝试过用case语句,但不知道如何加入并同时使用group by。

CREATE TABLE PROJECTS 
(  
    PROJECT_ID varchar(20), 
    PROJECT_NAME varchar(30), 
    STATUS int 
); 

CREATE TABLE PROJECTMANAGER 
(
    PROJECT_ID varchar(20), 
    MANAGER_ID varchar(20) 
); 

CREATE TABLE MANAGERS 
(   
    MANAGER_ID varchar(20), 
    MANAGER_NAME varchar(20), 
    TYPE varchar(20) 
); 


INSERT INTO PROJECTS (PROJECT_ID, PROJECT_NAME, STATUS) VALUES 
    ('project_001', 'Project 001', 0), 
    ('project_002', 'Project 002', 1), 
    ('project_003', 'Project 003', 2), 
    ('project_004', 'Project 004', 0), 
    ('project_005', 'Project 005', 2), 
    ('project_006', 'Project 006', 0), 
    ('project_007', 'Project 007', 1); 


INSERT INTO PROJECTMANAGER (PROJECT_ID , MANAGER_ID) VALUES 
    ('project_001', 'mgr_001'), 
    ('project_002', 'mgr_001'), 
    ('project_001', 'mgr_002'), 
    ('project_002', 'mgr_003'), 
    ('project_001', 'mgr_003'), 
    ('project_005', 'mgr_001'), 
    ('project_004', 'mgr_002'); 

INSERT INTO MANAGERS (MANAGER_ID, MANAGER_NAME, TYPE) VALUES 
    ('mgr_001', 'Manager 001', 'PRODUCT'), 
    ('mgr_002', 'Manager 002', 'HR'), 
    ('mgr_003', 'Manager 003', 'PRODUCT'), 
    ('mgr_004', 'Manager 004', 'FINANCE'), 
    ('mgr_005', 'Manager 005', 'PRODUCT'); 



Resulted Table: 

MANAGER_ID | MANAGER _NAME | COMPLETED_PROJECTS | IN_PROGRESS_PROJECTS | 
mgr_001 | Manager 001 |  1  |   2   | 
mgr_003 | Manager 003 |  0  |   1   | 
mgr_005 | Manager 005 |  0  |   0   | 

回答

0

尝试这样:

SELECT 
    m.manager_id, 
    m.manager_name, 
    SUM(CASE WHEN p.status = 2 THEN 1 ELSE 0 END) as completed, 
    SUM(CASE WHEN p.status != 2 THEN 1 ELSE 0 END) as in_progress 
FROM managers m 
LEFT JOIN projectmanager pm ON (m.manager_id = pm.manager_id) 
LEFT JOIN projects p ON (p.project_id = pm.project_id) 
WHERE m.type = 'product' 
GROUP BY m.manager_id 

最好的问候。

+0

非常感谢您的帮助。 – user1388346