提取13个月月度交易及数量数据SQL报错求助
解决DBISAM SQL解析错误(Error #11949)的建议
嘿,我帮你分析下这个问题:你遇到的Error #11949是因为DBISAM的SQL语法和你熟悉的SQL Server不一样,它不支持GETDATE()和你写的那种DATEADD用法,导致解析SQL的时候卡壳了。
错误原因详解
你原SQL里的GETDATE()是SQL Server专属函数,DBISAM不认;另外DBISAM的DATEADD函数要求第一个参数(时间间隔)必须是带引号的字符串(比如'month'),而你直接写了MONTH,这也会让解析器混乱,所以才抛出了“Expected end of statement but instead found (”的错误。
修正后的基础查询SQL
先把获取日期的部分改成DBISAM支持的写法,这样就能正常查询最近13个月的交易数据了:
SELECT ST.TXDATE, ST.CODE, ST.QUANTITY FROM StocTran ST WHERE ST.TXDATE >= DATEADD('month', -13, CURRENT_DATE) ORDER BY ST.TXDATE
如果CURRENT_DATE在你的DBISAM版本里不好使,换成TODAY()试试:
SELECT ST.TXDATE, ST.CODE, ST.QUANTITY FROM StocTran ST WHERE ST.TXDATE >= DATEADD('month', -13, TODAY()) ORDER BY ST.TXDATE
按月拆分数据的扩展写法
既然你提到要按月拆分数据,这里给你加了分组统计的逻辑,把交易按年份、月份和代码归类,还计算了每月的总数量,正好对应表头需求:
SELECT YEAR(ST.TXDATE) AS 交易年份, MONTH(ST.TXDATE) AS 交易月份, ST.CODE AS 交易代码, SUM(ST.QUANTITY) AS 月度总数量 FROM StocTran ST WHERE ST.TXDATE >= DATEADD('month', -13, CURRENT_DATE) GROUP BY YEAR(ST.TXDATE), MONTH(ST.TXDATE), ST.CODE ORDER BY 交易年份, 交易月份, ST.CODE
内容的提问来源于stack exchange,提问作者Griphon
相关产品推荐
相关产品推荐

