[英]oracle sql - optimize SELECT multiple rows as columns
这是我的表“扩展”,其中引用了“主”表。
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
它可以工作,但是性能是一个问题。 有什么想法可以对其进行优化吗?
提前致谢
您可以使用数据透视表语句达到以下目的:
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
这可能比您的查询更好。
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)
您可以使用此查询
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.