首页 > 解决方案 > 在 SQL Oracle 中透视表的某些部分

问题描述

我有两个表,它们更复杂,所以为了简单起见,我创建了更简单的版本,但我得到了类似的输出,正如你在我的 sql 连接中看到的那样。每个供应商的行数与该项目的附加费代码一样多。thr 项目可以没有附加费或 1-n。为简单起见,我在附加费表中只创建了 3 个代码字节,有超过 50 个代码,我不知道输出表中有多少个代码,当我看到供应商重复行时,我会在加入后看到它相同的项目和营业额。

create table supplier (
supplier_ID number,
supplier_name varchar2(20),
item varchar2(12),
turnover number,
surcharge_id number
);

create table surcharge (
surcharge_ID number,
surcharge_code number,
basic_value number,
surcharge_name varchar2(12),
weight number
);

insert into supplier values ( 1 , 'ABC_company' , 'A' , 1000, 1 );
insert into supplier values ( 1 , 'ABC_company' , 'A' , 1000, 2 );
insert into supplier values ( 1 , 'XYZ_company' , 'X' , 50, 1 );
insert into supplier values ( 1 , 'XYZ_company' , 'X' , 50, 2 );
insert into supplier values ( 1 , 'XYZ_company' , 'X' , 50, 3 );
insert into supplier values ( 1 , 'KLM_company' , 'K' , 280, null );

insert into surcharge values ( 1 , 20 , 0.5 , 'gold', 0.112 );
insert into surcharge values ( 2 , 50 , 0.3 , 'silver', 0.080 );
insert into surcharge values ( 3 , 80 , 0.1 , 'bronze', 0.010 );


select supplier_name,item,turnover,surcharge_code,basic_value,surcharge_name,weight 
from supplier 
left join surcharge on supplier.surcharge_id=surcharge.surcharge_ID
order by supplier_name,item;

SUPPLIER_NAME   ITEM    TURNOVER    SURCHARGE_CODE  BASIC_VALUE SURCHARGE_NAME     WEIGHT
ABC_company       A       1000         20                 .5            gold        .112
ABC_company       A       1000         50                 .3            silver      .08
KLM_company       K       280          -                  -              -           - 
XYZ_company       X       50           50                 .3            silver      .08
XYZ_company       X       50           80                 .1            bronze      .01
XYZ_company       X       50           20                 .5            gold        .112

可以将此类表转为所需的输出吗?请记住,您不知道将加入哪些代码以及其中有多少代码将被加入。

期望的输出

SUPPLIER_NAME   ITEM    TURNOVER       20      50     80    gold        silver     bronze 
 ABC_company      A       1000         .5      .3     -     .112        .08        -
 KLM_company      K       280          -       -      -     -           -          -
 XYZ_company      X       50           .5      .3     .1    .112        .08        .01
   

标签: sqlpivotoracle12c

解决方案


推荐阅读