从另一个映射表中选择查询中的选择列

时间:2018-12-14 03:06:04

标签: postgresql

我正在寻找具有可从另一个表派生的动态列名的选择查询。在示例数据和查询下面,我希望得到它。

create table mapping_tmp (
string_number  varchar,
mapping_name varchar
)

create table fact_tmp (
product varchar,
product_family varchar,
string1 varchar,
string2  varchar,
string3 varchar,
string4 varchar,
string5 varchar
)

insert into mapping_tmp values ('string1','commodity');
insert into mapping_tmp values ('string2','real commodity');
insert into mapping_tmp values ('string3','country');
insert into mapping_tmp values ('string4','region');
insert into mapping_tmp values ('string5','area');

insert into fact_tmp values ('P1','PF1','ABC1','DEF1','GHI1','JKL1','MNO1');
insert into fact_tmp values ('P2','PF2','ABC2','DEF2','GHI2','JKL2','MNO2');
insert into fact_tmp values ('P3','PF3','ABC3','DEF3','GHI3','JKL3','MNO3');
insert into fact_tmp values ('P4','PF4','ABC4','DEF4','GHI4','JKL4','MNO4');
insert into fact_tmp values ('P5','PF5','ABC5','DEF5','GHI5','JKL5','MNO5');
insert into fact_tmp values ('P6','PF6','ABC6','DEF6','GHI6','JKL6','MNO6');

预期的输出,应该从mapping_tmp中获取选择字段,并将这些字段数据显示在选择结果中。

select product,
(select string_number from mapping_tmp where mapping_name = 'country') as country,
(select string_number from mapping_tmp where mapping_name = 'area') as area
from fact_tmp;

实际查询是     选择产品,string3作为国家,string5作为事实_tmp中的区域;

和输出:

product country area
1   P1  GHI1    MNO1
2   P2  GHI2    MNO2
3   P3  GHI3    MNO3
4   P4  GHI4    MNO4
5   P5  GHI5    MNO5
6   P6  GHI6    MNO6

我正在寻找简单的sql查询,无法在应用程序中使用存储过程或函数。

0 个答案:

没有答案