使用表中的值计算“金额”

时间:2017-05-12 18:43:33

标签: sql database oracle

我的数据库中已有以下表格

EMP
    E_N E_NAM     E_RATE E_DEP
    --- ----- ---------- -----
    1   A            400      
    2   B            200 1    
    3   C            150 2    
    4   D            150 3    
    5   E            120 1    
    6   F            100 1    
    7   G            100 2    
    8   H             50 2    
    9   I             50 3    
    10  J             50 3    
    11  K            150 3  


WORKS
    E_NO PR_NO      HRS
    ---  ---   ----------
    2     1           10
    3     2           20
    5     1           20
    5     2           20
    5     3           20
    6     1           10
    6     2           10

我必须将每个项目计费的金额计算为AMOUNT,这是所有从事该项目的员工向项目计费的金额之和。收费金额为E_RATE * HRS(HRS和E_RATE的乘积)。

只有3个PR_NO:1,2和3.

我已经多次尝试过但没有用,我知道它必须是一个嵌套查询并且计算显示为AS AMOUNT,但是没有关于如何仅显示已经进行的计算的3个项目的线索

2 个答案:

答案 0 :(得分:0)

听起来像简单的加入和聚合:

select w.pr_no,
    sum(w.hrs * e.e_rate) as amount
from works w
join emp e on w.e_no = e.e_n
group by w.pr_no;

答案 1 :(得分:0)

加入表后的简单聚合SUM()函数

    --test data
    with EMP(e_no, e_name, e_rate, e_dep) as 
    (select     1,   'A',            400, null from dual union all     
    select     2,   'B',            200, 1    from dual union all 
    select     3,   'C',            150, 2     from dual union all
    select     4,   'D',            150, 3     from dual union all
    select     5,   'E',            120, 1     from dual union all
    select     6,   'F',            100, 1     from dual union all
    select     7,   'G',            100, 2     from dual union all
    select     8,   'H',             50, 2     from dual union all
    select     9,   'I',             50, 3     from dual union all
    select     10,  'J',             50, 3     from dual union all
    select     11,  'K',            150, 3   from dual),
    WORKS(e_no, pr_no, hrs) as 
    (select    2,     1,           10 from dual union all
    select    3,     2,          20 from dual union all
    select    5,     1,           20 from dual union all
    select    5,     2,           20 from dual union all
    select    5,     3,           20 from dual union all
    select    6,     1,           10 from dual union all
    select    6,     2,           10 from dual)
    -- actual query starts here
    select w.pr_no, sum(w.hrs*e.e_rate) as amount
    from   works w
     inner join emp e on (w.e_no = e.e_no)
    group by w.pr_no;


    "PR_NO"|"AMOUNT"
    1|5400
    2|6400
    3|2400