簡體   English   中英

計算從一個值移動到另一個sql的列的差異

[英]calculate difference for a column moving from one value to another sql

我有以下兩個表:

表格1

item_id, sent_from, received_by, month, value

表2

item_id, sender, value, month

send_from,received_by,sender的值是相同的類型和格式。 數據如下:

表格1

values ('1234','A1111','K0000',1,5)
values ('1234','K0000','K0000',2,5)
values ('1234','K0000','Z0000',3,10)

表2

values ('1234','A1111',5,1)
values ('1234','K0000',10,2)
values ('1234','Z0000',20,3)

我正在嘗試調和table1值和table2中從月份到上個月的值之間的差異。 例如:表1中第3個月的值應為10,該值與表2中第3-2個月的值之差相同。 因此20-10 =10。然后10-5 = 5,則5-0應該是5,依此類推。 下面的impact_value應該與表1中的值相同。

以下是我擁有的代碼,但它無法正常工作,並且無法計算正確的值:

select sls.item_id,
       sls.sent_from,
       sls.received_by,
       sum(case when prd.sender = sent_from then -1 * prd.value
                else prd.value
           end) impact_value,
       sls.mnth
from   table2 prd
       inner join tabl1 sls on (prd.item_id = sls.item_id
                                and (prd.sender = sls.sent_from
                                     or (prd.sender = sls.received_by
                                         )))
group by sls.item_id,
         sls.sent_from,
         sls.received_by,
         sls.mnth;

但是,impact_value字段未像邏輯中那樣填充正確的值。

編輯:

將以下內容插入到table1中

values ('1234','K0000','Z0005',4,40)
values ('1234','BBBBB','ZZZZZ',4,60)

並將以下內容插入table2

values ('1234','K0000',60,4)
values ('1234','BBBBB',120,4)

使用分析或窗口函數導聯可以幫助您獲得所需的結果

select t.*, lead(value) over (order by item_id, month) lead_value from table2 t;

上面的查詢返回的結果如下所示,您可以將其用作聯接中的子查詢:

1234 A1111 5 1 10

1234 K0000 10 2 20

1234 Z0000 20 3(NULL)

這是獲取輸出10、5、5的查詢:

select t.*, value - nvl(lead_value, 0) from (select t.*, lead(value) over (order by item_id, month desc) lead_value from table2 t) t;

暫無
暫無

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

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