我正在尝试从两个表 SQL Oracle 10g 中检索数据
I am trying to retrieive data from two tables SQL Oracle 10g
我有两个表 tbl_inc t 和 tbl_expn。
两张表除了主键外其他字段都一样
我想获得显示一年中一个月的图表的金额,每天使用 sum(t.amount) 和 sum(d.amount) 。
我一天有多个金额。
以下代码不累加每天的金额
select extract(day from t.date_id) as tday,
extract(month from t.date_id) as mon,
extract(year from t.date_id) as yr,
t.amount as incamt,
d.amount as expamt
from tbl_inc t,tbl_expn d
where t.user_id=d.user_id and
t.user_id='222' and
extract(month from t.date_id)='04' and
extract(month from d.date_id)='04' and
extract(year from t.date_id)='2015' and
extract(year from d.date_id)='2015' and
extract(day from t.date_id)=extract(day from d.date_id)
order by t.date_id
这段代码的结果是这样的
TDAY MON YR INCAMT EXPAMT
29 4 2015 50 600
29 4 2015 100 200
29 4 2015 50 200
29 4 2015 100 600
30 4 2015 70 700
30 4 2015 30 500
30 4 2015 70 700
30 4 2015 30 500
我希望输出为
TDAY MON YR INCAMT EXPAMT
29 4 2015 150 800
30 4 2015 100 1200
请帮忙...
看来您需要 SUM
和 GROUP BY
试一试:
select
extract(day from t.date_id) as tday,
extract(month from t.date_id) as mon,
extract(year from t.date_id) as yr,
SUM(t.amount) as incamt,
SUM(d.amount) as expamt
from tbl_inc t,tbl_expn d
where t.user_id=d.user_id and
t.user_id='222' and
extract(month from t.date_id)='04' and
extract(month from d.date_id)='04' and
extract(year from t.date_id)='2015' and
extract(year from d.date_id)='2015' and
extract(day from t.date_id)=extract(day from d.date_id)
GROUP BY extract(day from t.date_id), extract(month from t.date_id), extract(year from t.date_id)
order by t.date_id
您还需要将 from tbl_inc t,tbl_expn d
更改为正确的 JOIN
以避免重复。
如果你的 date_id 没有时间部分,你可以删除 trunc
。 trunc
会删除时间部分(如果它在那里的话)。
你 select 一个月,分组和 select 日期部分年和月接缝没用,因为你已经知道它们。
select extract(day from t.date_id) as tday
, ta as incamt
, da as expamt
, t.*, d.*
from ( select trunc(date_id) date_id, user_id, sum(amount) ta from t group by trunc(date_id), user_id ) t
, ( select trunc(date_id) date_id, user_id, sum(amount) da from d group by trunc(date_id), user_id ) d
where t.user_id = d.user_id
and t.date_id = d.date_id
and t.user_id=1
and extract(month from t.date_id)='04'
and extract(year from t.date_id)='2015'
order by extract(day from t.date_id)
你没有写任何关于你拥有的行数的信息,但你需要在两个表上都有一个索引。我建议一个 user_id, extract(month from date_id), extract(year from date_id)
另一个 user_id, trunc(date_id)
我有两个表 tbl_inc t 和 tbl_expn。 两张表除了主键外其他字段都一样 我想获得显示一年中一个月的图表的金额,每天使用 sum(t.amount) 和 sum(d.amount) 。 我一天有多个金额。 以下代码不累加每天的金额
select extract(day from t.date_id) as tday,
extract(month from t.date_id) as mon,
extract(year from t.date_id) as yr,
t.amount as incamt,
d.amount as expamt
from tbl_inc t,tbl_expn d
where t.user_id=d.user_id and
t.user_id='222' and
extract(month from t.date_id)='04' and
extract(month from d.date_id)='04' and
extract(year from t.date_id)='2015' and
extract(year from d.date_id)='2015' and
extract(day from t.date_id)=extract(day from d.date_id)
order by t.date_id
这段代码的结果是这样的
TDAY MON YR INCAMT EXPAMT
29 4 2015 50 600
29 4 2015 100 200
29 4 2015 50 200
29 4 2015 100 600
30 4 2015 70 700
30 4 2015 30 500
30 4 2015 70 700
30 4 2015 30 500
我希望输出为
TDAY MON YR INCAMT EXPAMT
29 4 2015 150 800
30 4 2015 100 1200
请帮忙...
看来您需要 SUM
和 GROUP BY
试一试:
select
extract(day from t.date_id) as tday,
extract(month from t.date_id) as mon,
extract(year from t.date_id) as yr,
SUM(t.amount) as incamt,
SUM(d.amount) as expamt
from tbl_inc t,tbl_expn d
where t.user_id=d.user_id and
t.user_id='222' and
extract(month from t.date_id)='04' and
extract(month from d.date_id)='04' and
extract(year from t.date_id)='2015' and
extract(year from d.date_id)='2015' and
extract(day from t.date_id)=extract(day from d.date_id)
GROUP BY extract(day from t.date_id), extract(month from t.date_id), extract(year from t.date_id)
order by t.date_id
您还需要将 from tbl_inc t,tbl_expn d
更改为正确的 JOIN
以避免重复。
如果你的 date_id 没有时间部分,你可以删除 trunc
。 trunc
会删除时间部分(如果它在那里的话)。
你 select 一个月,分组和 select 日期部分年和月接缝没用,因为你已经知道它们。
select extract(day from t.date_id) as tday
, ta as incamt
, da as expamt
, t.*, d.*
from ( select trunc(date_id) date_id, user_id, sum(amount) ta from t group by trunc(date_id), user_id ) t
, ( select trunc(date_id) date_id, user_id, sum(amount) da from d group by trunc(date_id), user_id ) d
where t.user_id = d.user_id
and t.date_id = d.date_id
and t.user_id=1
and extract(month from t.date_id)='04'
and extract(year from t.date_id)='2015'
order by extract(day from t.date_id)
你没有写任何关于你拥有的行数的信息,但你需要在两个表上都有一个索引。我建议一个 user_id, extract(month from date_id), extract(year from date_id)
另一个 user_id, trunc(date_id)