Sql 如何联接表和每月总和

Sql 如何联接表和每月总和,sql,aggregate-functions,firebird,Sql,Aggregate Functions,Firebird,我有两张桌子,T1和T2就是这样设计的 T1: T2: 我想展示这样的东西 Month NUM_VALUE_1 NUM_VALUE_2 NUM_VALUE_3 ----- ----------- ----------- ----------- 01 40000.00 19000.00 8500.00 02 850

我有两张桌子,T1和T2就是这样设计的

T1:

T2:

我想展示这样的东西

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
ie通过按日期月份分组将两个表连接起来,每个月我必须将NUM_VALUE_1、NUM_VALUE_2(从T1开始)和NUM_VALUE_3(从T2开始)相加。

使用该函数使月份过期,例如:

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
使用该函数可使月份过期,例如:

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

我不确定Firebird支持的所有语法,但希望它能起作用:

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

我不确定Firebird支持的所有语法,但希望它能起作用:

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

是的,这对我来说是最好的答案!这正是我需要的!谢谢@MohamedBenattou如果是这样的话,你应该在答案前面打勾来接受答案。是的,这是我最好的答案!这正是我需要的!谢谢@MohamedBenattou如果是这样,你应该在答案前勾选复选标记来接受答案。