在plsql中表nsxx里面有字段month、tax_amount、corp、tax_type其中tax_amount为month的税额累计额corp为企业tax_type为税种;但tax_amount不是每个月都有如没有应取离它最近一个月的数据请问如何用sql查询语句统计2022年1月至12月每个月所有corp的tax_type的tax_amount的加总额
以下是可能的查询语句:
SELECT corp, tax_type, SUM(tax_amount) AS total_tax_amount
FROM (
  SELECT n1.corp, n1.tax_type, 
         COALESCE(n2.tax_amount, n1.tax_amount) AS tax_amount, 
         EXTRACT(MONTH FROM n1.month) AS month
  FROM nsxx n1
  LEFT JOIN nsxx n2 
    ON n1.corp = n2.corp AND n1.tax_type = n2.tax_type 
       AND n2.month < n1.month
  WHERE EXTRACT(YEAR FROM n1.month) = 2022
) t
GROUP BY corp, tax_type, month
ORDER BY corp, tax_type, month;
这个查询语句使用了子查询和自连接,以及 COALESCE 函数。主要思路是:
- 在子查询中,将表nsxx中每个记录的month字段拆分成月份,然后按照corp、tax_type进行分组,同时记录下每个月的tax_amount。
 - 在子查询中,使用自连接,找到每条记录之前最近的一个月的tax_amount,如果没有则使用当前月的tax_amount。
 - 最后,在主查询中,按照corp、tax_type、month进行分组,计算每个分组的tax_amount总和。
 
需要注意的是,如果表nsxx中的记录比较多,这个查询可能会比较慢,可以根据实际情况进行优化。
原文地址: https://www.cveoy.top/t/topic/JEz 著作权归作者所有。请勿转载和采集!