PL/SQL 查询语句统计累计税额:处理缺失月份数据
可以使用子查询和聚合函数来解决此问题,具体的 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');
解析:
- 子查询中的 WHERE 子句过滤了表 nsxx 中 Year 为 2022 和 2023 的月份数据。
- 右连接查询子查询得到的结果集和一个包含 2022 年 1 月至 2023 年 1 月的所有月份的临时表。这里使用 CONNECT BY LEVEL 生成一系列连续的月份。
- 使用 NVL 函数处理没有数据的月份,将其 tax_amount 值设为 0。
- 使用 TO_CHAR 函数将月份格式化为 YYYY-MM 格式,并按照月份排序。
- 最后,使用 GROUP BY 子句和 SUM 聚合函数将每个月份的税额加总,得到每个月份的总税额。
原文地址: https://www.cveoy.top/t/topic/lZwO 著作权归作者所有。请勿转载和采集!