提示> [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]关键字 'WHERE' 附近有语法错误。
时间: 2023-10-06 12:10:17 浏览: 375
这个错误提示表明在 SQL 查询语句中出现了语法错误,具体是在 `WHERE` 关键字附近。可能是 `WHERE` 关键字前面的语句存在错误,导致无法正确解析 `WHERE` 关键字。你可以检查一下查询语句是否有拼写错误、缺失关键字、语法错误等问题。另外,也可以把查询语句分成多行,逐行检查语法是否正确,以便更好地定位错误。
相关问题
提示[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]在应使用条件的上下文(在 ',' 附近)中指定了非布尔类型的表达式。 (4145) [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]关键字 'GROUP' 附近有语法错误。
这个错误提示意味着你的 SQL 查询中出现了语法错误。根据提示信息来看,可能是你的语句中的某个条件表达式不是布尔类型,或者是 GROUP BY 关键字附近出现了语法错误。
根据你提供的 SQL 语句和错误提示,我看到你的语句中缺少一个 ON 子句,同时你在 WHERE 子句中使用了 IN 运算符,但是括号内的子查询没有指定任何条件。因此,你可以尝试这样修改你的 SQL 语句:
```
SELECT FactoryName, JiJXH, shi, AVG(sale) AS sale_avg
FROM tmp_apply
WHERE (FactoryName, JiJXH) IN (
SELECT FactoryName, JiJXH
FROM tmp_apply
GROUP BY FactoryName, JiJXH
HAVING SUM(ShuL) > 500
)
GROUP BY FactoryName, JiJXH, shi;
```
这个修改后的 SQL 语句中,我添加了一个 ON 子句,并且在 IN 子句的括号中添加了一个子查询,用于指定需要查询的条件。同时,我也对 AVG 函数的结果添加了一个别名,使查询结果更具可读性。
SELECT shi,Xian,Name,XieYBH,ShuL,GuoJBTE,ShengBTE,sale,mode_sale,FactoryName,BusinessName,ChanPMC,JiJXH,GouJRQ FROM(tmp_apply t1 JOIN ( SELECT FactoryName, ChanPMC, JiJXH, sale AS mode_sale FROM ( SELECT FactoryName, ChanPMC, JiJXH, sale, ROW_NUMBER() OVER (PARTITION BY FactoryName, ChanPMC, JiJXH ORDER BY COUNT(*) DESC) AS rn FROM tmp_apply GROUP BY FactoryName, ChanPMC, JiJXH, sale ) t WHERE rn = 1) t2 ON t1.FactoryName=t1.FactoryName AND t1.ChanPMC=t2.ChanPMC AND t1.JiJXH=t2.JiJXH WHERE ABS(sale-mode_sale)>5; 提示> [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]关键字 'WHERE' 附近有语法错误。
这条 SQL 查询语句存在语法错误,问题在于 `FROM` 关键字后面的表格名 `tmp_apply` 应该与括号之间留一个空格,即应该写成 `FROM (tmp_apply t1 JOIN ...`。因此,正确的查询语句应该是:
```
SELECT shi,Xian,Name,XieYBH,ShuL,GuoJBTE,ShengBTE,sale,mode_sale,FactoryName,BusinessName,ChanPMC,JiJXH,GouJRQ
FROM (tmp_apply t1 JOIN (
SELECT FactoryName, ChanPMC, JiJXH, sale AS mode_sale
FROM (
SELECT FactoryName, ChanPMC, JiJXH, sale,
ROW_NUMBER() OVER (PARTITION BY FactoryName, ChanPMC, JiJXH ORDER BY COUNT(*) DESC) AS rn
FROM tmp_apply
GROUP BY FactoryName, ChanPMC, JiJXH, sale
) t
WHERE rn = 1
) t2
ON t1.FactoryName=t2.FactoryName AND t1.ChanPMC=t2.ChanPMC AND t1.JiJXH=t2.JiJXH)
WHERE ABS(sale-mode_sale)>5;
```
你可以将这个修正后的查询语句尝试运行,看看是否能够正常执行。
阅读全文