2016-02-02 44 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