在oracle中加入表

时间:2015-05-14 15:11:06

标签: sql 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

我希望问题很明确,
问候。

1 个答案:

答案 0 :(得分:1)

加入两个表格和pivot结果:

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中定义数量的值。此外,{11}版本提供pivot,旧版本使用max(decode...) {action: "openURL", url: newURL}。如果您需要完全动态的解决方案,请阅读文章:herelink1