11g SUM BY两列返回不同的数据

时间:2015-09-28 13:10:49

标签: sql oracle oracle11g sum obiee

Oracle 11g让我头疼,我无法找到任何与我的问题相关的答案。

我正在尝试计算每个工作单的收入,这不作为计算字段提供,只能通过计算获得。

可用的栏目:

  • 商品代码
  • 项目价格(int)
  • 数量(int)
  • 费? (未充电时为0,充电时为-1)

" Labor"和"材料",这两者都可以为客户收取费用。

我现在的代码如下:

SUM(
    CASE WHEN ("BOL/BOM Items"."BOLBOM Code") IN ('1-845413','1-845911','1-845912', '1-MW-222') THEN
    0
    ELSE

        ("Workorder BOL Items"."Quantity MW (BOL)" * -("Workorder BOL Items"."Charge MW (BOL)")) * "Workorder BOL Items"."Price Incl BTW MW (BOL)"
        +
        ("Workorder BOM Items"."Quantity MW (BOM)" * -("Workorder BOM Items"."Charge MW (BOM)")) * "Workorder BOM Items"."Price Incl BTW MW (BOM)"

    END

    BY
    "Work Orders"."CallID"
)

这样可以完美地计算每个工作单的所有费用,但是当"项目代码"的列时。被添加到查询中。当我从视图中排除它时,这并不重要。

示例是添加列时返回112(2x16(人工)+ 1x80(材料))的结果,但是当项目代码列不存在时返回80.

如果没有查询要求附加列,是否有可行的方法?

下面是一个示例数据集,其中包含" CalcRevenue"是理想的结果。

CallID  BOLBOM Code CalcRevenue Quantity MW (BOM)   Charge MW (BOM) Price Incl BTW MW (BOM) Quantity MW (BOL)   Charge MW (BOL) Price Incl BTW MW (BOL)
0010000065554342    1-SW-004    0   0   0   0,00    0   0   0,00
0010000065554342    1-SW-006    0   0   0   0,00    0   0   0,00
0010000065554342    1-SW-008    0   0   0   0,00    0   0   0,00
0010000065554342    1-SW-012    0   0   0   0,00    0   0   0,00
0010000066233542    1-845921    112 1   -1  80,00   0   0   0,00
0010000066233542    1-MW-009    112 0   0   0,00    2   -1  16,00
0010000066233542    1-MW-222    112 0   0   0,00    2   -1  0,00
0010000066233542    1-SW-044    112 0   0   0,00    0   0   0,00
0050001100208165    3-842753    0   1   0   90,75   0   0   0,00
0050001100208165    3-SW-102    0   0   0   0,00    0   0   0,00
0050001100208165    3-SW-104    0   0   0   0,00    0   0   0,00
0050001100208165    3-SW-105    0   0   0   0,00    0   0   0,00
0050001100208165    3-SW-108    0   0   0   0,00    0   0   0,00
0050001100208165    3-SW-109    0   0   0   0,00    0   0   0,00
0050001100208165    3-SW-110    0   0   0   0,00    0   0   0,00

每个CallID都有多个" BOLBOM代码",而后者又有费用/数量和价格列。

如果我删除" BOLBOM"这就是相同数据会发生的情况。 (和相关的)专栏。

CallID  CalcRevenue
0010000065554342    0
0010000066233542    208
0050001100208165    0

我想计算每个CallID(工单)的收入 - 计算如下:

Revenue = (Quantity * -(Charge)) * Price

向客户收费时费用为-1,否则为0。 它是根据" BOLBOM"订单的级别,但应该与"工作订单"水平。

0 个答案:

没有答案