假设我有一个包含产品和收入的数据库。我知道,对于产品' Apple',我们有很多种类的应用程序,大约70%的销售额是奶奶史密斯,30%是金色的美味。
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
我假设我需要一些案例和子查询但不完全确定如何解决这个问题。
答案 0 :(得分:0)
您需要一个包含产品详细信息的表(或类似的行源,例如WITH
子句)。称之为DW.PRODUCT_DETAILS
。它应该有三列:PRODUCT_DETAIL_ID
,PRODUCT_NM
和ALLOCATION_PCT
,其中PRODUCT_NM
是OP_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
表中。