可以使用子查询和聚合函数来解决此问题,具体的 SQL 查询语句如下所示:

SELECT 
  TO_CHAR(ADD_MONTHS(TO_DATE('2022-01-01', 'YYYY-MM-DD'), LEVEL-1), 'YYYY-MM') AS 'Month',
  NVL(SUM(tax_amount), 0) AS 'Total Tax Amount'
FROM 
  (
    SELECT 
      month, 
      tax_amount, 
      corp, 
      tax_type 
    FROM 
      nsxx 
    WHERE 
      EXTRACT(YEAR FROM month) BETWEEN 2022 AND 2023
  ) t
RIGHT JOIN 
  (
    SELECT 
      ADD_MONTHS(TO_DATE('2022-01-01', 'YYYY-MM-DD'), LEVEL-1) AS month 
    FROM 
      DUAL 
    CONNECT BY LEVEL <= MONTHS_BETWEEN(TO_DATE('2023-01-01', 'YYYY-MM-DD'), TO_DATE('2022-01-01', 'YYYY-MM-DD'))+1
  ) m 
ON 
  t.month = m.month 
GROUP BY 
  TO_CHAR(m.month, 'YYYY-MM')
ORDER BY 
  TO_CHAR(m.month, 'YYYY-MM');

解析:

  1. 子查询中的 WHERE 子句过滤了表 nsxx 中 Year 为 2022 和 2023 的月份数据。
  2. 右连接查询子查询得到的结果集和一个包含 2022 年 1 月至 2023 年 1 月的所有月份的临时表。这里使用 CONNECT BY LEVEL 生成一系列连续的月份。
  3. 使用 NVL 函数处理没有数据的月份,将其 tax_amount 值设为 0。
  4. 使用 TO_CHAR 函数将月份格式化为 YYYY-MM 格式,并按照月份排序。
  5. 最后,使用 GROUP BY 子句和 SUM 聚合函数将每个月份的税额加总,得到每个月份的总税额。
PL/SQL 查询语句统计累计税额:处理缺失月份数据

原文地址: https://www.cveoy.top/t/topic/lZwO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录