2017-04-27 45 views
0

這裏是我的表'擴展',它有'主'表的引用。oracle sql - 優化SELECT多行爲列

MASTER_ID TEXT CATEGORY 
1   A1 AA 
1   A2 BB 
1   A3 CC 

我需要把這些類別爲列在我的選擇查詢,所以我想出這些查詢:

SELECT MASTER_ID, 
(SELECT TEXT FROM EXTENSION WHERE CATEGORY = "AA") AS "AATEXT", 
(SELECT TEXT FROM EXTENSION WHERE CATEGORY = "BB") AS "BBTEXT", 
(SELECT TEXT FROM EXTENSION WHERE CATEGORY = "CC") AS "CCTEXT" 

FROM MASTER 
JOIN EXTENSION 
ON MASTER.ID = EXTENSION.MASTER_ID 

結果:

MASTER_ID CATEGORY_1 CATEGORY_2 CATEGORY_3 
1   AA   BB   CC 

它的工作原理,但性能一個問題。任何想法如何優化?

在此先感謝

+0

添加一些示例表格數據和預期結果 - 所有以及格式化文本。 – jarlh

+0

我沒有看到在你的查詢中提到的任何地方的'category'表。你在某個地方有錯字嗎? –

+0

@TimBiegeleisen,對不起,表被稱爲擴展 – lorraine

回答

-1
SELECT M.MASTER_ID, 
    CASE WHEN E.CATEGORY = 'AA' THEN E.TEXT END AS AATEXT, 
    CASE WHEN E.CATEGORY = 'BB' THEN E.TEXT END AS BBTEXT. 
    CASE WHEN E.CATEGORY = 'CC' THEN E.TEXT END AS CCTEXT 
    FROM MASTER M 
    INNER JOIN EXTENSION E 
    ON (M.MASTER.ID = E.EXTENSION.MASTER_ID) 

您可以使用此查詢

+0

如果你的值是動態的,你能告訴你如何獲取動態記錄 –

+0

這些只是樣本值..這些不能被硬編碼,因爲這些是動態的和許多.. – lorraine

+0

文本字段值是來自應用程序上的用戶輸入 – lorraine

0

可以使用旋轉語句來實現這一目標:

SELECT * FROM EXTENSION 
PIVOT (max(CATEGORY) FOR TEXT 
    IN ('A1' AS Category_1, 'A2' AS Category_2, 'A3' AS Category_3)) 

執行上的數據結果上面的查詢以下輸出:

MASTER_ID | CATEGORY_1 | CATEGORY_2 | CATEGORY_3 
1   | AA   | BB   | CC 

這可能比您的查詢執行得更好。