可以使用子查询和聚合函数来实现:

SELECT TO_CHAR(dates.month, 'YYYY-MM') AS month,
       SUM(tax_amount) AS total_tax_amount
FROM (
  SELECT TO_DATE('2022-01-01', 'YYYY-MM-DD') + LEVEL - 1 AS month
  FROM DUAL
  CONNECT BY LEVEL <= 12
) dates
LEFT JOIN nsxx ON nsxx.month = (
  SELECT MAX(month)
  FROM nsxx
  WHERE month <= dates.month
)
GROUP BY TO_CHAR(dates.month, 'YYYY-MM')
ORDER BY TO_CHAR(dates.month, 'YYYY-MM')

解释一下查询语句的各个部分:

  1. 子查询:生成2022年1月至12月的日期序列。
SELECT TO_DATE('2022-01-01', 'YYYY-MM-DD') + LEVEL - 1 AS month
FROM DUAL
CONNECT BY LEVEL <= 12

这里使用了CONNECT BY LEVEL语句来生成1到12的序列,然后加上起始日期'2022-01-01',得到日期序列。

  1. LEFT JOIN:将日期序列与nsxx表左连接,找到离每个月最近的数据。
LEFT JOIN nsxx ON nsxx.month = (
  SELECT MAX(month)
  FROM nsxx
  WHERE month <= dates.month
)

这里使用子查询找到nsxx表中离每个月最近的数据,然后与日期序列进行左连接,保证每个月都有一条记录。

  1. 聚合函数:计算每个月的税额累计额。
SELECT TO_CHAR(dates.month, 'YYYY-MM') AS month,
       SUM(tax_amount) AS total_tax_amount
FROM ...
GROUP BY TO_CHAR(dates.month, 'YYYY-MM')

最后使用TO_CHAR函数将日期转换成YYYY-MM格式,然后使用SUM函数计算每个月的tax_amount的加总额。

在plsql中表nsxx里面有字段month、tax_amount、corp其中tax_amount为month的税额累计额corp为企业;但month不是每个月都有如没有应取离它最近一个月的数据请问如何用sql查询语句统计2022年1月至2022年12月每个月的tax_amount的加总额

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

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