繁体   English   中英

oracle sql-将SELECT多行优化为列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM