2016-02-02 43 views
1

我有2个表,T1和T2设计的那样;如何连接表和每月总和

T1:

ID   DATE_1   NUM_VALUE_1   NUM_VALUE_2 
--   ------   -----------   ----------- 
1  01/01/2015    15000.00    10000.00 
2  01/16/2015    25000.00    9000.00 
3  02/06/2015    8500.00    12000.00 
4  03/27/2015    21200.00    19000.00 
5  07/21/2015    47800.00    21000.00 

T2:

ID   DATE_2   NUM_VALUE_3 
--   ------   ----------- 
1  01/12/2015    8500.00 
2  02/11/2015    11200.00 
3  02/20/2015    35600.00 
4  04/25/2015    20000.00 

我想说明这样的事情;

Month  NUM_VALUE_1  NUM_VALUE_2   NUM_VALUE_3 
-----  -----------  -----------   ----------- 
    01   40000.00   19000.00    8500.00 
    02   8500.00   12000.00   46800.00 
    03   21200.00   19000.00    0.00 
    04    0.00    0.00   20000.00 
    05    0.00    0.00    0.00 
    06    0.00    0.00    0.00 
    07   47800.00   21000.00    0.00 
    08    0.00    0.00    0.00 
    09    0.00    0.00    0.00 
    10    0.00    0.00    0.00 
    11    0.00    0.00    0.00 
    12    0.00    0.00    0.00 

即通过日期的月份将它们分组加入2个表,每个月我要总结NUM_VALUE_1和NUM_VALUE_2(从T1)和NUM_VALUE_3(从T2)。

回答

3

使用EXTRACT函数来获取月份过时的,是这样的:

select m, Sum(Num_Value_1), Sum(Num_Value_2), Sum(Num_Value_3) 
from (
    select EXTRACT(MONTH from DATE_1) m, NUM_VALUE_1, NUM_VALUE_2, 0 as NUM_VALUE_3 from T1 
    union all 
    select EXTRACT(MONTH from DATE_2) m, 0 as NUM_VALUE_1, 0 as NUM_VALUE_2, NUM_VALUE_3 from T2 
) GROUP BY m 
+0

是的,这对我来说是最好的答案! 它正是我所需要的! 谢谢! –

+0

@MohamedBenattou如果是这样,您应该通过在答案前勾上勾号来接受答案。 –

1

我不知道所有的火鸟支持语法的,但我希望这个工程:

SELECT 
    Months.Month, 
    SUM(T1.NUM_VALUE_1) AS Total_Num_Value_1, 
    SUM(T1.NUM_VALUE_2) AS Total_Num_Value_2, 
    SUM(T1.NUM_VALUE_3) AS Total_Num_Value_3 
FROM 
    (SELECT 1 AS Month UNION SELECT 2 AS Month UNION SELECT 3 AS Month UNION 
    SELECT 4 AS Month UNION SELECT 5 AS Month UNION SELECT 6 AS Month UNION 
    SELECT 7 AS Month UNION SELECT 8 AS Month UNION SELECT 9 AS Month UNION 
    SELECT 10 AS Month UNION SELECT 11 AS Month UNION SELECT 12 AS Month UNION) Months 
LEFT OUTER JOIN T1 ON EXTRACT(MONTH FROM T1.DATE_1) = Months.Month 
LEFT OUTER JOIN T2 ON EXTRACT(MONTH FROM T2.DATE_2) = Months.Month 
GROUP BY 
    Months.Month