【问题标题】:sql allocate values based on percentagesql根据百分比分配值
【发布时间】:2017-03-18 01:27:29
【问题描述】:

假设我有一个包含产品和收入的数据库。我知道对于“苹果”这个产品,我们有很多种苹果,大约 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

我现在拥有的是

我正在尝试得到这样的东西

我假设我需要一些 case whens 和 sub 查询,但不完全确定如何去做。

【问题讨论】:

  • 那么您是否将“Granny Smith, 70”存储在某个地方?
  • 另外,随机分类的数据存储标签是怎么回事?你想在什么环境下解决这个问题?
  • 当你说“你知道”时,你的意思是你有另一个表格来定义每种水果的百分比细分吗?
  • 删除了除sql 之外的所有标签。请选择相关数据库
  • 我没有另一张桌子有 granny smith,70 存储在某个地方

标签: sql


【解决方案1】:

您需要一个包含产品详细信息的表(或类似的行源,例如 WITH 子句)。调用它,例如DW.PRODUCT_DETAILS。它应该包含三列:PRODUCT_DETAIL_IDPRODUCT_NMALLOCATION_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 表中。

【讨论】:

  • 有没有办法在不创建另一个包含产品详细信息的表格的情况下做到这一点?
  • 或者换一种说法,我如何创建一个将收入分成 70/30 的临时表?
  • 是的,有办法。您使用的是哪个数据库?
  • 我正在使用 Hive
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多