可以使用以下 SQL 语句来查询统计 2022 年 1 月至 2023 年 1 月每个月的 tax_amount 的加总额:

SELECT TO_CHAR(add_months(to_date('2022-01-01','yyyy-mm-dd'),level-1),'yyyy-mm') AS month,
       SUM(tax_amount) AS total_tax_amount
FROM nsxx
WHERE TO_CHAR(month,'yyyy-mm-dd') >= '2022-01' AND TO_CHAR(month,'yyyy-mm-dd') <= '2023-01'
GROUP BY TO_CHAR(add_months(to_date('2022-01-01','yyyy-mm-dd'),level-1),'yyyy-mm')
ORDER BY month;

解释:

  • 使用 add_months 函数和 level-1 来生成 2022 年 1 月至 2023 年 1 月的月份序列。
  • 使用 TO_CHAR 函数将月份转换为 yyyy-mm 格式。
  • 使用 WHERE 子句过滤出 2022 年 1 月至 2023 年 1 月的数据。
  • 使用 GROUP BY 子句和 SUM 函数对每个月的 tax_amount 求和。
  • 使用 ORDER BY 子句按月份排序输出结果。

处理缺失月份数据

如果 nsxx 表中某些月份没有数据,可以使用以下方法进行处理:

  1. 使用 LEFT JOIN 连接一个包含所有月份的虚拟表
WITH months AS (
    SELECT TO_CHAR(add_months(to_date('2022-01-01','yyyy-mm-dd'),level-1),'yyyy-mm') AS month
    FROM dual
    CONNECT BY level <= 13
)
SELECT m.month, COALESCE(SUM(n.tax_amount), 0) AS total_tax_amount
FROM months m
LEFT JOIN nsxx n ON m.month = TO_CHAR(n.month, 'yyyy-mm')
WHERE TO_CHAR(m.month, 'yyyy-mm') >= '2022-01' AND TO_CHAR(m.month, 'yyyy-mm') <= '2023-01'
GROUP BY m.month
ORDER BY m.month;
  1. 使用 LAG 函数向前查找最近的月份数据
SELECT TO_CHAR(month, 'yyyy-mm') AS month, 
       COALESCE(tax_amount, LAG(tax_amount, 1, 0) OVER (ORDER BY month)) AS total_tax_amount
FROM nsxx
WHERE TO_CHAR(month, 'yyyy-mm') >= '2022-01' AND TO_CHAR(month, 'yyyy-mm') <= '2023-01'
ORDER BY month;

以上两种方法都可以确保每个月都有数据统计,即使表中某些月份没有数据。请根据您的具体情况选择最合适的方案。


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

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