首页 > 解决方案 > sql中的累计和

问题描述

我有一个问题,我需要为每年的每个月做一个累计和我一直在搜索互联网,解决方案是使用 ORDER (ORDER BY),但它给了我一个错误,附近有一个错误订单,它并没有更多地解释我。根据互联网,语法是正确的,但我不明白为什么它不去。我试图将日期转换为字符串,但它也不允许我这样做。有什么解决办法吗?

这是我的咨询:

SELECT YEAR(FECHA_IMPUT) AÑO,
       MONTH(FECHA_IMPUT) MES, 
       COD_MAQUINA ,
       SUM(CANTIDAD_OK) SUMA,
       SUM(CANTIDAD_OK) OVER(ORDER BY DATEPART(mm,FECHA_IMPUT)) AS suma        
FROM RTMAQUINA
WHERE COD_MAQUINA='LB_TRASVASE'
GROUP BY COD_MAQUINA, MONTH(FECHA_IMPUT),YEAR(FECHA_IMPUT)
ORDER BY YEAR(FECHA_IMPUT), MONTH(FECHA_IMPUT) ASC

错误:订单附近的语法不正确

结果查询

错误:订单附近的语法不正确

标签: sqlsql-serversyntax-error

解决方案


我相信你想要的语法是:

SELECT YEAR(FECHA_IMPUT) AÑO,
       MONTH(FECHA_IMPUT) MES, 
       COD_MAQUINA ,
       SUM(CANTIDAD_OK) SUMA,
       SUM(SUM(CANTIDAD_OK)) OVER (PARTITION BY YEAR(FECHA_IMPUT) ORDER BY MONTH(FECHA_IMPUT)) AS suma        
FROM RTMAQUINA
WHERE COD_MAQUINA = 'LB_TRASVASE'
GROUP BY COD_MAQUINA, 
         MONTH(FECHA_IMPUT),
         YEAR(FECHA_IMPUT)
ORDER BY YEAR(FECHA_IMPUT), MONTH(FECHA_IMPUT) ASC;

注意嵌套SUM()的 s。这种语法看起来很笨拙,但在将窗口函数与聚合函数一起使用时是正确的。内部SUM()是聚合。外部SUM()用于窗口功能。

还要注意 window 子句。首先,它需要引用在GROUP BY-- 或聚合函数中使用的相同表达式。其次,我认为您想根据问题的表述方式按年份划分。


推荐阅读