sql中的累计和

时间:2019-04-08 15:55:00

标签: sql sql-server syntax-error

我有一个问题,我需要为每年的每个月做一个通配符,并且我一直在搜索互联网,解决方案是使用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

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

Result query

ERROR: incorrect syntax near the order

1 个答案:

答案 0 :(得分:0)

我相信您想要的语法是:

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()。该语法看起来很尴尬,但是在将窗口函数与聚合函数一起使用时是正确的。内部SUM()是聚合。外部SUM()用于窗口功能。

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