Jaspersoft Studio运行SQL报错:输入'month'/'year'无有效替代项、'='处缺少EOF
错误原因
- IN子查询字段不匹配(触发「在'='处缺少EOF」报错)
IN运算符要求子查询返回的字段数量、类型必须和前置的匹配项一致。你当前语句中Orderid IN (...)的前置匹配项是订单ID(单字段数值类型),但子查询返回的是年、月两个数值字段,语法完全不成立,SQL解析器解析到此处时无法识别后续逻辑,直接报缺少结束符错误。 - 保留字用作别名(触发「输入'month'/'year'无有效替代项」报错)
year、month既是SQL标准保留字,也是你用到的日期函数名,你直接将这两个词设为字段别名,Jaspersoft Studio的SQL解析器无法区分当前上下文的year/month是函数还是别名,触发识别错误。 - 报表参数引用不规范
如果你语句中的Startyear、Startmonth是Jaspersoft中自定义的报表参数,必须按照Jaspersoft的规则写成$P{Startyear}、$P{Startmonth}格式,直接写变量名会被解析器识别为未知表字段,同样会触发解析异常。
修正后参考SQL(假设你的需求是筛选指定年月的所有订单)
SELECT Orderid, Orderdate, Shipcity, YEAR(Orderdate) AS order_year, MONTH(Orderdate) AS order_month FROM Orders WHERE YEAR(Orderdate) = $P{Startyear} AND MONTH(Orderdate) = $P{Startmonth}
如果确实需要用到子查询匹配,要保证子查询返回的是Orderid字段,示例如下:
SELECT Orderid, Orderdate, Shipcity, YEAR(Orderdate) AS order_year, MONTH(Orderdate) AS order_month FROM Orders WHERE Orderid IN ( SELECT Orderid FROM Orders WHERE YEAR(Orderdate) = $P{Startyear} AND MONTH(Orderdate) = $P{Startmonth} )
内容的提问来源于stack exchange,提问作者Rohit Yeole
相关产品推荐
相关产品推荐

