[英]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.