如何关联两个不同表的SELECT查询结果并按指定月份排序?
关联两个表的按月统计查询解决方案
没问题,我来帮你搞定这个需求!你需要把两个分别来自不同表的按月统计结果合并到一起,同时保留第一个查询的所有月份顺序,没有订单的月份显示0,用LEFT JOIN就能轻松实现。
最终SQL语句
SELECT t1.Months, t1."Count Customer", NVL(t2."Order", 0) AS "Order" FROM ( -- 第一个查询:按月统计活跃客户数 SELECT TO_CHAR(Entry_date, 'MON.YYYY') AS Months, COUNT(Customer_id) AS "Count Customer" FROM table1 WHERE entry_date >= TO_DATE('01.01.1900', 'DD.MM.YYYY') AND entry_date <= TO_DATE('31.12.2017', 'DD.MM.YYYY') AND Customer_status = 'Active' GROUP BY TO_CHAR(entry_date,'MON.YYYY') ) t1 LEFT JOIN ( -- 第二个查询:按月统计订单数 SELECT TO_CHAR(leave_date, 'MON.YYYY') AS Months, COUNT(order_id) AS "Order" FROM table2 WHERE leave_date >= TO_DATE('01.01.1900', 'DD.MM.YYYY') AND leave_date <= TO_DATE('31.12.2017', 'DD.MM.YYYY') GROUP BY TO_CHAR(leave_date,'MON.YYYY') ) t2 ON t1.Months = t2.Months ORDER BY to_date(t1.Months, 'MON.YYYY');
关键说明
- LEFT JOIN的作用:以第一个子查询
t1的月份为基准,确保所有t1里的月份都会被显示,哪怕t2里没有对应月份的订单数据。 - NVL函数:把
t2."Order"中的NULL值替换成0,完美匹配你期望的结果格式。 - 排序逻辑:最后用
t1.Months转换为日期来排序,保证和第一个查询的月份顺序完全一致。
这样执行后,就能得到你想要的如下格式结果:
Months | Count Customer | Order
Jan. 2017 | 15 | 0
Feb. 2017 | 1 | 8
Mar. 2017 | 30 | 10
内容的提问来源于stack exchange,提问作者Tarek85
相关产品推荐
相关产品推荐

