SQL Server子查询语法错误求助(原Firebird用户)
解决SQL Server中子查询的语法错误问题
嘿,这个错误其实很好排查——SQL Server要求作为数据源的子查询(也就是派生表)必须指定一个别名,而你原语句里的子查询末尾没有加别名,这就是导致)附近语法错误的直接原因!
Firebird可能对派生表别名的要求比较宽松,但SQL Server在这方面是严格要求的:任何时候你把一个子查询当成一张“临时表”来查询时,都必须给它起个名字(哪怕是很简单的别名,比如t或者art_summary都可以)。
修正后的完整查询语句
SELECT CVE_ART, IIF (CANTIDAD < 0, 0, CANTIDAD) AS CANTIDAD FROM ( SELECT CVE_ART, SUM((CANT * SIGNO * -1) / 6) AS CANTIDAD FROM MINVE05 WHERE DATEDIFF(MONTH, FECHA_DOCU, CURRENT_TIMESTAMP) > 0 AND DATEDIFF(MONTH, FECHA_DOCU, CURRENT_TIMESTAMP) <= 6 AND CVE_CPTO IN (2, 4, 51) AND ALMACEN = 1 GROUP BY CVE_ART ) AS art_summary -- 这里就是必须添加的派生表别名
关键修改点
我只是在子查询的闭合括号)后面加了AS art_summary,给这个临时的结果集指定了一个别名。这样SQL Server就能正确识别这个派生表,不会再抛出语法错误了。
以后遇到类似的场景(比如用子查询作为FROM子句的数据源),记得都要给子查询加上别名,这是SQL Server的硬性规则哦!
内容的提问来源于stack exchange,提问作者Carlos
相关产品推荐
相关产品推荐

