在plsql中表nsxx里面有字段month、tax_amount、corp、tax_type其中tax_amount为month的税额累计额corp为企业;但month不是每个月都有如没有应取离它最近一个月的数据请问如何用sql查询语句统计2022年1月至2022年12月每个月的tax_amount的加总额
以下是查询语句:
SELECT TO_CHAR(dates, 'YYYY-MM') AS month,
SUM(tax_amount) AS total_tax_amount
FROM (
SELECT COALESCE(month, LAST_VALUE(month IGNORE NULLS) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS month,
tax_amount
FROM nsxx
WHERE tax_type = 'xxx' AND corp = 'xxx' AND dates BETWEEN TO_DATE('2022-01-01', 'YYYY-MM-DD') AND TO_DATE('2022-12-31', 'YYYY-MM-DD')
) t
RIGHT JOIN (
SELECT ADD_MONTHS(TO_DATE('2022-01-01', 'YYYY-MM-DD'), LEVEL-1) AS dates
FROM dual
CONNECT BY LEVEL <= MONTHS_BETWEEN(TO_DATE('2022-12-01', 'YYYY-MM-DD'), TO_DATE('2022-01-01', 'YYYY-MM-DD'))+1
) d ON t.month = TO_CHAR(d.dates, 'YYYY-MM')
GROUP BY TO_CHAR(dates, 'YYYY-MM')
ORDER BY TO_CHAR(dates, 'YYYY-MM');
其中,COALESCE函数用于判断如果month为空,则取离它最近一个月的数据。LAST_VALUE函数用于获取最近一个非空的month值。
RIGHT JOIN和CONNECT BY LEVEL用于生成2022年1月至12月每个月的日期。
另外,需要根据实际情况修改查询语句中的tax_type和corp条件。
原文地址: https://www.cveoy.top/t/topic/IJt 著作权归作者所有。请勿转载和采集!