Mysql按日期加入Union Query

时间:2017-05-27 07:25:07

标签: mysql database select join union

我有2张桌子 我希望结果使用连接查询。我没有任何想法 Join Query By

TBL_SUCCESS_ORDER
------------------------
id |    date    | amount
-------------------------
 1 | 2017-01-01 | 1000
 2 | 2017-01-06 |  300
 3 | 2017-01-29 |   50
 4 | 2017-02-02 |  100
 5 | 2017-02-16 |  400
 6 | 2017-03-01 |  500
 7 | 2017-04-03 | 1200



TBL_FAIL_ORDER
------------------------
id |    date    | amount
-------------------------
 1 | 2017-01-03 |  400
 2 | 2017-01-07 |  300
 3 | 2017-01-24 |   50
 4 | 2017-02-02 |  100
 5 | 2017-04-07 |  200


RESULT
------------------------------------------------------------------
year |   month | sum_of_succes_amount | sum_of_fail_amount | total
------------------------------------------------------------------
2017 | January |                 1350 |                750 |  2100
2017 | Febuary |                  500 |                100 |   600
2017 |   March |                  500 |                  0 |   500
2017 |   April |                 1200 |                200 |  1400

我已经堆了整整一个星期,我没有得到它。当我连接api json

TBL_PENDING_ORDER
------------------------
id |    date    | amount
-------------------------
 1 | 2017-04-03 |  600
 2 | 2017-05-07 |  600

RESULT
-----------------------------------------------------------------------------------------
year |   month | sum_of_succes_amount | sum_of_fail_amount | sum_of_pending_amount |total
-----------------------------------------------------------------------------------------
2017 | January |                 1350 |                750 |                     0 | 2100
2017 | Febuary |                  500 |                100 |                     0 |  600
2017 |   March |                  500 |                  0 |                     0 |  500
2017 |   April |                 1200 |                200 |                   600 | 2000
2017 |     May |                    0 |                  0 |                   600 |  600

如果我添加第三张表怎么办? TBL_PENDING_ORDER

1 个答案:

答案 0 :(得分:0)

您可以使用UNION ALLGROUP BY

使用以下解决方案
SELECT 
    YEAR(x.date), 
    MONTH(x.date), 
    SUM(CASE WHEN x.type = 'S' THEN amount ELSE 0 END) AS sum_of_succes_amount,
    SUM(CASE WHEN x.type = 'F' THEN amount ELSE 0 END) AS sum_of_fail_amount,
    SUM(amount) AS total 
FROM (
    SELECT id, date, amount, 'S' AS type FROM TBL_SUCCESS_ORDER
    UNION ALL
    SELECT id, date, amount, 'F' AS type FROM TBL_FAIL_ORDER
)x GROUP BY YEAR(x.date), MONTH(x.date)

您想要添加第三个表格TBL_PENDING_ORDER

SELECT 
    YEAR(x.date), 
    MONTH(x.date), 
    SUM(CASE WHEN x.type = 'S' THEN amount ELSE 0 END) AS sum_of_succes_amount,
    SUM(CASE WHEN x.type = 'F' THEN amount ELSE 0 END) AS sum_of_fail_amount,
    SUM(CASE WHEN x.type = 'P' THEN amount ELSE 0 END) AS sum_of_pending_amount,
    SUM(amount) AS total 
FROM (
    SELECT id, date, amount, 'S' AS type FROM TBL_SUCCESS_ORDER
    UNION ALL
    SELECT id, date, amount, 'F' AS type FROM TBL_FAIL_ORDER
    UNION ALL
    SELECT id, date, amount, 'P' AS type FROM TBL_PENDING_ORDER
)x GROUP BY YEAR(x.date), MONTH(x.date)