使用其他键从第二个表中获取值并将它们相加

时间:2014-03-03 13:15:09

标签: sql oracle group-by sum

第一张表

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.

2 个答案:

答案 0 :(得分: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

使用的连接是旧式的,但我认为这可以工作。

答案 1 :(得分: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以匹配问题中的结果,尽管这与您描述的逻辑相反。