繁体   English   中英

Oracle sql - 汇总折扣

[英]Oracle sql - aggregated discounts

需要有关以下查询的帮助以获得汇总折扣。

我有一个项目和一些折扣取决于购买的数量。

Stretch / FromUnit / DiscType / Discount

1 / 0 / Default / 5

1 / 0 / Extra / 15

2 / 7 / Extra / 17

3 / 10 / Extra / 20

1 / 0 / Bonus / 5

我需要一个查询来获得以下结果:

Stretch / FromUnit / Discount

1 / 0 / 25

2 / 7 / 27

3 / 10 / 30

正如您所看到的,默认折扣 (5) 适用于所有数量,奖金折扣也是如此,我需要将其与其他折扣结合起来,具体取决于它们分配的范围。

找到一些使用“总和分区”的方法,如下所示,但我找不到正确的方法......

select stretch, fromUnit, sum(discount) over (partition by stretch) discount

from (select t.*

   ,row_number() over (partition by stretch, fromUnit, DiscType

             order by rownum) as rn

 from table t);

希望我解释一下,并提前致谢。

将非额外添加到额外

select t.Stretch, t.FromUnit, t.Discount + ne.s
from mytable t
cross join (
   select sum(Discount) s
   from mytable
   where DiscType != 'Extra'
) ne
where t.DiscType = 'Extra'

您可以使用:

SELECT Stretch,
       SUM(FromUnit) AS FromUnit,
       SUM(Discount) + MAX(extra_discount) AS discount
FROM   (
  SELECT t.*,
         SUM(CASE WHEN DiscType IN ('Default', 'Bonus') THEN Discount END)
           OVER () AS extra_discount
  FROM   table_name t
)
WHERE DiscType NOT IN ('Default', 'Bonus')
GROUP BY Stretch

其中,对于样本数据:

CREATE TABLE table_name ( Stretch, FromUnit, DiscType, Discount ) AS
SELECT 1,  0, 'Default',  5 FROM DUAL UNION ALL
SELECT 1,  0, 'Extra',   15 FROM DUAL UNION ALL
SELECT 2,  7, 'Extra',   17 FROM DUAL UNION ALL
SELECT 3, 10, 'Extra',   20 FROM DUAL UNION ALL
SELECT 1,  0, 'Bonus',    5 FROM DUAL;

输出:

拉紧 从单位 折扣
2 7 27
3 10 30
1 0 25

db<> 在这里小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM