我有一个问题,我需要为每年的每个月做一个通配符,并且我一直在搜索互联网,解决方案是使用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
错误:订单附近的语法不正确
答案 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
或聚合函数中使用的相同表达式。其次,我认为您想根据问题的表达方式按年份进行划分。