需要有關以下查詢的幫助以獲得匯總折扣。
我有一個專案和一些折扣取決于購買的數量。
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);
希望我解釋一下,并提前致謝。
uj5u.com熱心網友回復:
將非額外添加到額外
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'
uj5u.com熱心網友回復:
您可以使用:
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<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325098.html
上一篇:未找到解決方案的sql案例
