在Oracle中求和并加入两个表

时间:2016-11-28 08:53:46

标签: sql database oracle

我有两个表:基表和详细信息表。我需要使用Base表从Detail表中获取计数。

表格结构

基地表

Nid  UserId  BaseVal
--------------------
1    150     100

详细信息表

Did  Nid  SeqVal
----------------
1    1    500
2    1    600

我想要这个:

结果表

BaseVal  SeqVal
---------------
100      1100

我尝试过这个查询,但我只能获得Summation值。我也需要BaseVal。

SELECT SUM(SeqVal) as SEQVAL
FROM TBL_DETAIL
WHERE Nid =: Nid

2 个答案:

答案 0 :(得分:1)

您必须先join个表,然后计算总和:

select b.nid, b.baseVal, sum(d.seqVal)
from base_table b join detail_table d on b.nid = d.nid
where b.nid =: Nid
group by b.nid, b.baseVal

答案 1 :(得分:1)

可能有多个答案。假设您的基表始终有1个记录,而详细信息表每个基表记录有多个行,则可能的答案是

SELECT 
    AVG(BaseVal) Sum_BaseVal, SUM(SeqVal) Sum_SeqVal 
From BaseTable T1, DetailTable T2 
WHERE T1.Nid = T2.Nid 
      AND T1.Nid = :1

将T1.Nid与正确值绑定,以确保获得所需Nid的值。

注意:您还可以将上述查询与GROUP BY Nid一起使用(如果您的问题陈述是复杂查询的简化版本,则可能是必要的)

其他可能的答案可能是(我只给1节省时间,但存在更多)

WITH 
    SeqSum as (SELECT SUM(SeqVal) Sum_SeqVal FROM DetailTable WHERE Nid = 1)
SELECT BaseVal, Sum_SeqVal 
FROM BaseTable , SeqSum 
WHERE Nid = 1

您可以进一步调整查询以获得适当的条件(如果有的话)。