这是我的数据。
StateService
给出此数据。我该如何显示呢?
Bubble03StateService
我尝试过“左连接横向”,但可悲。它要做的是返回两行。
之所以要这样做,是因为Im正在开发一个模块,用于存储具有多个计量单位(最多3个)的产品。所以我不想创建Unit,Pack和Case的3列,因此我创建了UOM_conversion表的原因。
答案 0 :(得分:1)
我认为这是一个全球性的误解,但是在解决您的问题之后,我会为您提供。我建议你看看。
因此,首先:这里需要的是crosstab()函数。
CREATE EXTENSION tablefunc;
对于以下脚本:
create table uom
(
uom_id int primary key
, description varchar (250)
);
create table products
(
prod_id int primary key
, prod_desc varchar(250)
, base_unit_id int references uom (uom_id)
);
create table uom_conversion
(
prod_id int references products (prod_id)
, from_unit_id int references uom (uom_id)
, multiplier int
, to_unit_id int references uom (uom_id)
);
insert into uom values (1, 'Piece'), (2, 'Box'), (3, 'Case');
insert into products values (1, 'Custom Product', 1);
insert into uom_conversion values (1,1,100,2), (1,1,400,3);
请求是:
select
p.prod_desc as "Product"
, u.description as "Base Unit"
, u2.description as "Pack Unit"
, final_res."1" as "Multiplier"
, u3.description as "Case Unit"
, final_res."2" as "Multiplier"
from crosstab(
'select
p.prod_id
, base_unit_id
, multiplier
from products p
inner join uom_conversion uc
on uc.prod_id = p.prod_id')
as final_res (prod_id int, "1" int, "2" int)
inner join crosstab('select
uc.prod_id
, u.description
, uc.to_unit_id
from uom_conversion uc
inner join uom u
on u.uom_id = uc.to_unit_id')
as final_res_2 (prod_id int, "Box" int, "Case" int)
on final_res.prod_id = final_res_2.prod_id
inner join products p
on p.prod_id = final_res.prod_id
inner join uom u
on p.base_unit_id = u.uom_id
inner join uom u2
on u2.uom_id = final_res_2."Box"
inner join uom u3
on u3.uom_id = final_res_2."Case";
这正在解决您的问题。但是:您如何知道什么是pack_unit和什么是case_unit?我认为,从这个问题来看,还会有更多的事情。