2013-07-02 37 views
1

我需要兩行下列要求相結合幫助(它更容易使用表格來證明。):的Oracle SQL合併行值分隔列

我的模式是這樣的:

項目表:

project_id | name 
-------------------------------- 
1    Project1 
2    Project2 
3    Project3 

project_program表

id | project_id | program_id 
----------------------------------- 
1  1    1  
2  1    2 
2  3    2 

節目表:

program_id | type | name 
--------------------------------------- 
1    A   test  
2    B   production 

的select語句所需的輸出:

project_id | name  | A  | B 
------------------------------------------------------------------- 
1    Project1 test  production 
2    Project2 (null)  (null) 
2    Project3 (null)  production 

這是我已經設法到目前爲止來實現:

SELECT 
    project.*, 
    CASE WHEN program.type LIKE 'A' THEN program.name ELSE NULL END AS A, 
    CASE WHEN program.type LIKE 'B' THEN program.name ELSE NULL END AS B 
FROM 
    project 
    LEFT JOIN project_program ON project.project_id = project_program.project_id 
    LEFT JOIN program ON project_program.program_id = program.program_id 

這很接近但不完全。現在我的結果如下所示:

project_id | name  | A  | B 
------------------------------------------------------------------- 
1    Project1 test  (null) 
1    Project1 (null)  production 
2    Project2 (null)  (null) 
3    Project3 (null)  production 

我正在使用Oracle 11g。

回答

2

,你可能只需要agregate你有什麼 - 是這樣的:

SELECT id, name, max(A) A, max(b) B 
FROM (
    SELECT 
    project.id, Project.name, 
    CASE WHEN program.type LIKE 'A' THEN program.name ELSE NULL END AS A, 
    CASE WHEN program.type LIKE 'B' THEN program.name ELSE NULL END AS B 
    FROM 
    project 
    LEFT JOIN project_program ON project.project_id = project_program.project_id 
    LEFT JOIN program ON project_program.program_id = program.program_id 
) X 
GROUP BY id, name 
+0

感謝一個非常快的響應! –