繁体   English   中英

在Oracle中联接表

[英]Joining tables in oracle

我有一个像这样的主数据表:

tableA 
 ID | tainfo1 | tainfo2
 ----------------------
  1 | me      | 100
  2 | you     | 200
  3 | they    | 300 

和这样的属性表:

tableB:
 ID | type  | tbinfo1 | tbinfo2
 ------------------------------
 1  | 1     | good    | 7
 1  | 2     | bad     | 5
 2  | 2     | so&so   | 6
 3  | 1     | awesome | 10 

在属性表中,我的type集很小,我想知道是否有机会进行这样的数据输出。

 ID | tainfo1 | tainfo2 | tbinfo1_type1 | tbinfo2_type1 | tbinfo1_type2 | tbinfo2_type2 
-----------------------------------------------------------------------------------------
 1  | me      | 100     | good          | 7             | bad           | 5
 2  | you     | 200     |               |               | so&so         | 6
 3  | they    | 300     | awesome       | 10            |               |

如果所有属性都存在,则填充所有列,例如记录1, _typeX列也将显示为空白,例如type1的记录2

我希望问题清楚,
问候。

连接两个表并透视结果:

select * 
  from (
    select id, tainfo1, tainfo2, type, tbinfo1, tbinfo2 
      from tableA join tableB using (id))
  pivot (max(tbinfo1) t1, max(tbinfo2) t2 for type in (1 info1, 2 info2))

输出:

   ID TAINFO1       TAINFO2 INFO1_T1     INFO1_T2 INFO2_T1     INFO2_T2
----- ---------- ---------- ---------- ---------- ---------- ----------
    1 me                100 good                7 bad                 5 
    2 you               200                       so-so               6 
    3 they              300 awesome            10

SQLFiddle

这将适用于列type定义数量的值。 Oracle 11g版本也提供了pivot ,对于较旧的版本,请使用max(decode...)如此 如果您需要完全动态的解决方案,请阅读文章: link1link2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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