在具有多个连接的select查询中求和和减法运算

时间:2013-03-03 11:53:30

标签: sql stored-procedures

我有以下表格:

TABLE ITEMS包含

ITEM_ID ITEM
-------------------
1       Food
2       Medical
3       Shopping
4       Others

TABLE EXPENSE_DURATION包含

E_ID    NAME    FROM_DATE               TO_DATE
----------------------------------------------------------------
1   FEB_2012    1-Feb-2013 12:00:00 AM  28-Feb-2013 12:00:00 AM
2   MAR_2012    1-Mar-2013 12:00:00 AM  31-Mar-2013 12:00:00 AM

TABLE AMOUNT_FOR_EXPENSE包含

AFE_ID  E_ID    ITEM_LIST   AMOUNT
------------------------------------
1       1       1,2,3,4     5000
2       2       1,2,3,4     6000

TABLE EXPENSE包含

EXPENSE_ID  E_ID    ITEM_ID     DATE                    AMOUNT
---------------------------------------------------------------------
1          1        1           1-Feb-2013 12:00:00 AM  250
2          1        2           1-Feb-2013 12:00:00 AM  450
3          1        3           1-Feb-2013 12:00:00 AM  300
4          1        4           1-Feb-2013 12:00:00 AM  100
5          1        1           2-Feb-2013 12:00:00 AM  4500
6          1        2           2-Feb-2013 12:00:00 AM  3500
7          1        3           2-Feb-2013 12:00:00 AM  2000
8          1        4           2-Feb-2013 12:00:00 AM  1500

现在我想创建一个存储过程,它给我expense_summary。我将Just E_ID作为参数传递给此存储过程。

因此,我需要一个表包含相应的摘要。

示例:E_ID = 1

结果:

TOTAL_OUT   TOTAL_IN    SUMMARY (IN-OUT)
12600       5000        -7600

我只知道

SELECT SUM(AMOUNT) FROM EXPENSE WHERE E_ID=1

结果> 12600

SELECT AMOUNT FROM AMOUNT_FOR_EXPENSE WHERE E_ID=1

结果> 5000

我知道这两个单独的查询,但我不知道如何合并它们以及如何在选择查询中执行减法 加入即可。

请帮助制作选择查询/存储过程,以便我可以根据需要生成结果。

2 个答案:

答案 0 :(得分:4)

您可以使用以下查询来获得结果:

select e.e_id, 
  e.Total_out, 
  a.amount Total_in,
  (e.Total_out - a.amount) * -1 Summary
from
(
  select sum(amount) Total_out,
    e_id
  from expense
  group by e_id
) e
left join AMOUNT_FOR_EXPENSE a
  on e.e_id = a.e_id
where e.e_id = 1

请参阅SQL Fiddle with Demo

答案 1 :(得分:-2)

试试这个

   SELECT SUM(AMOUNT),AMOUNT FROM EXPENSE ,AMOUNT_FOR_EXPENSE  WHERE E_ID=1