我有两张桌子:
table1
date value code
01-Jan-17 230 B2
01-Feb-17 100 B2
01-Mar-17 30 B2
01-Jan-17 56 C1
01-Feb-17 90 C1
table2
date value code
01-Apr-17 50 B2
02-Apr-17 160 B2
03-Apr-17 210 B2
04-Apr-17 130 B2
01-May-17 113 B2
02-May-17 106 B2
01-Apr-17 83 C1
02-Apr-17 20 C1
很抱歉,从一开始就不清楚,我之前提到的并不简单,我忘了添加两个条件。
1)如果在我指定日期(2017年3月2日)的条件下,如果它小于或等于table1的最大日期,那么它应该仅对table1值求和并从指定日期的年份开始( 2017年1月1日)至指定日期月末(2017年3月31日)。因此,在这种情况下,总和应该是360。
2)如果我在指定日期(2017年4月3日)的情况下,如果它超过table1的最大日期,那么它应该从指定日期的年初开始(2017年1月1日)的总和值到表1的最大日期加上下月初(2017年4月1日)到表2的指定日期月末(2017年4月30日)的总和。在这种情况下,总和应该是910。
感谢, 小号
答案 0 :(得分:1)
这只是union all
和一些where
逻辑:
select sum(value), code
from ((select value, code
from t1
where dte >= date '2017-03-01' and dte < date '2017-04-01'
) union all
(select value, code
from t1
where dte >= date '2017-04-01' and dte < date '2017-05-01'
)
) vb
group by code;
答案 1 :(得分:1)
最简单的是:
Select
(Select Sum(value) from table1
where code = 'B2'
and date between DATE '2017-01-01'
and DATE '2017-03-31')
+
(Select Sum(value) from table2
where code = 'B2'
and date between DATE '2017-04-01'
and DATE '2017-04-30')
但你也可以做一个联盟
Select Sum(value)
from (Select code, value from table1
Where date between DATE '2017-01-01'
and DATE '2017-03-31')
union all
(Select code, value from table1
Where date between DATE '2017-04-01'
and DATE '2017-04-30')
where code = 'B2'