簡體   English   中英

如何獲得缺少樹級別的sql結果?

[英]How to get sql result for missing tree level?

我有一棵樹,讓我們假設有 14 個級別,但是樹枝中有一些間隙,例如

tree values a>b>..>h>i>..>k>l>..>n
tree level:=1 2  8 9 11 12 14

需要得到像

a>b>h>h>h>h>h>i>k>k>l>n>n>
1 2 3 4 5 6 7 8 9 10 11 12 13 14

基本上,我有一個包含 7 條記錄的表,因此在單個查詢中需要 14 條記錄,我有指定的主鍵或樹級別。

agent_id,commission,lvl,amount  
a,1%,1,500  
b,1%,2,500  
h,1%,8,500  
i,1%,9,500  
k,1%,11,500  
l,1%,12,500  
n,1%,13,500  

它是一棵樹到表的映射,我只是給了一個分支而不是讓它進一步復雜化。

結果應該是

 a (5+5+5+5+5+5+5)=35
 b (5+5+5+5+5+5+5+5+5+5+5)=55
 h (5+5+5+5+5)=25
 i (5+5+5+5+5)=25
 k (5+5+5)=15
 l (5+5+5)=15
 n 5

我需要在 500-1% 上給 N 佣金,然后在 (500(n)+500(gap)+500(l))-1% 上給 L 佣金,但是空樹節點 M 不應該考慮其他佣金,但是然后再次對於 K (500(n)+500(l)+500(k))1% 等等直到代理 A 所以對於 B 也需要考慮空代理佣金,但僅適用於 lvl 3,4,5,6 ,7.

SQL小提琴

Oracle 11g R2 架構設置

CREATE TABLE data ( agent_id,commission,lvl,amount ) AS
SELECT 'a',0.01, 1,500 FROM DUAL UNION ALL  
SELECT 'b',0.01, 2,500 FROM DUAL UNION ALL
SELECT 'h',0.01, 8,500 FROM DUAL UNION ALL
SELECT 'i',0.01, 9,500 FROM DUAL UNION ALL
SELECT 'k',0.01,11,500 FROM DUAL UNION ALL
SELECT 'l',0.01,12,500 FROM DUAL UNION ALL
SELECT 'n',0.01,14,500 FROM DUAL;

查詢 1

SELECT agent_id,
       SUM( commission*amount ) OVER ( ORDER BY lvl DESC )
         + COALESCE(
             commission*amount*(LAG( lvl ) OVER ( ORDER BY lvl DESC )-lvl-1 ),
             0
           )
         AS total
FROM   data

結果

| AGENT_ID | TOTAL |
|----------|-------|
|        n |     5 |
|        l |    15 |
|        k |    15 |
|        i |    25 |
|        h |    25 |
|        b |    55 |
|        a |    35 |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM