2014-03-03 52 views
0

第一臺獲取值,並使用其他鍵從第二個表總結了他們

ID Desc Effective date Alias 
1 abc 12-JAN-10 A1 
2 efg 10-FEB-11 A2 
3 hij 03-MAR-11 A3 
4 klm 05-APR-12 A4 

二表

Split Date Alias Value 
13-JAN-10 A1 2 
14-JAN-11 A1 3 
09-FEB-11 A2 5 
04-MAR-12 A3 7 
25-DEC-12 A3 1 
21-JUL-13 A4 2 
30-NOV-12 A4 3 

結果表:

ID Desc Effective date Alias Value 
1 abc 12-JAN-10 A1 5 --it got 5 because it sums up values from 2nd table where effective date >split date 
2 efg 10-FEB-11 A2 1 
3 hij 03-MAR-11 A3 8 
4 klm 05-APR-12 A4 5 

條件:

總結所有的值第二個表將Effective_date>將生效日期的拆分日期和第一個表中的別名作爲第二個表的鍵。 如果沒有找到effective_date>分割日期,那麼結果表中的值應該爲1.

+1

到目前爲止你做了什麼?展示你的代碼,除非你想讓其他人把你的栗子從火中拉出來。 –

+0

我只能創建查詢來創建表1.表1來自我加入的2個不同的表。現在,我堅持加入這個'第二張桌子' – user3279639

回答

0

請問您可以嘗試以下查詢嗎?

select t1.id, t1.desc, t1.effective_date, t1.alias, nvl(sum(t2.value), 1) value 
from table1 t1, table2 t2 
where t2.alias (+) = t1.alias 
    and t2.split_date (+) > t1.effective_date 
group by t1.id, t1.desc, t1.effective_date, t1.alias 

使用的連接是舊式的,但我認爲這可以工作。

+0

我試過你的邏輯,但它似乎沒有添加滿足條件的值。添加值的條件是它應該找到表2中的所有行,其中t2.alias = t2.alias和t2.split_date> t1.effective_date。如果它沒有找到任何日期,那麼默認值應該是1. – user3279639

+0

好吧,我改變了不平等,現在可以嗎? – Emmanuel

0

下面是使用left outer join的方法:

select t1.id, t1.desc, t1.effective_date, t1.alias, 
     coalesce(sum(t2.value), 1) as value 
from table1 t1 left outer join 
    table2 t2 
    on t1.alias = t2.alias and 
     t1.effective_date < t2.split_date 
group by t1.id, t1.desc, t1.effective_date, t1.alias; 

我改變了邏輯t1.effective_date < t2.split_date以匹配問題的結果,雖然這是您所描述的相反的邏輯。

+0

您的邏輯在未找到effective_date> split_date時添加所有值。當它發現,但默認值爲1 – user3279639

+0

我想澄清這個例子:生效日期= 20-DEC-10,拆分日期包括這些日期:19-DEC-10,21-DEC-10,30- DEC-10。它應該添加21-DEC-10和31-DEC-10中的所有值,它不應該包含19-DEC-10中的值。另一個例子是,如果生效日期= 20-DEC-10,拆分日期= 18-DEC-10和19-DEC-10,則該值應該默認爲1,不需要總結。 – user3279639

+0

@ user3279639。 。 。這就是這個查詢應該做的事情,假設日期實際上是作爲日期存儲的。如果它不工作,也許你將日期存儲爲字符串。 –

相關問題