2017-03-17 147 views
0

假设我有一个包含产品和收入的数据库。我知道,对于产品'苹果',我们有很多appple,约70%的销售是奶奶史密斯和30%是金色美味。sql根据百分比分配值

select 
     delivery_month_id, 
     sales_order_id, 
     product_id, 
     product_nm, 
     net_cost_distributed_amt, 
from dw.op_sales_order  
where delivery_month_id >= 201601 

我现在已经是 enter image description here

我试图让这样的事情 enter image description here

我假设我需要一些情况下whens和子查询,但不完全知道如何去做这件事。

+1

那么你有'奶奶史密斯,70'存储在某个地方吗? – APC

+0

另外,随机分配的数据存储标签有什么用?你试图解决这个问题的环境是什么? – APC

+0

当你说“你知道”时,你的意思是你有另一张表格来定义每种水果的百分比细目? – BobC

回答

0

您需要一个包含产品详细信息的表(或类似的行来源,例如,WITH子句)。调用它,例如DW.PRODUCT_DETAILS。它应该有三列:PRODUCT_DETAIL_ID,PRODUCT_NMALLOCATION_PCT,其中PRODUCT_NMOP_SALES_ORDER表中显示的名称。

然后,你可以离开了加入该表到你的查询以获得您想要的结果:

SELECT so.delivery_month_id, 
     so.sales_order_id, 
     so.product_id, 
     so.product_nm, 
     so.net_cost_distributed_amt, 
     so.net_cost_distributed_amt * NVL (pd.allocation_pct,1) rev_revised 
FROM dw.op_sales_order so 
     LEFT JOIN dw.product_details pd ON pd.product_nm = so.product_nm 
WHERE so.delivery_month_id >= 201601 

随着左连接,像橙子和柚子,这没有任何细节,将不再需要在PRODUCT_DETAILS表中。

+0

有没有办法做到这一点,而无需创建另一个产品详细信息表? – Landon

+0

换句话说,我如何创建一个临时表来分割收入70/30? – Landon

+0

是的,有一种方法。你正在使用哪个数据库? –