2017-04-06 31 views
2

我得到下面的异常时,我运行查询:其中条件预计在上下文指定的非布尔类型的表达式,在SQL服务器附近

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS ROW_NUM_VAL, CASE WHEN ingest_table.[OVER]_RAN BETWEEN '10' AND '12' THEN 'F' ELSE 'P' END [OVER]_STATUS FROM(SELECT [OVER] AS [OVER]_RAN FROM S_3000_7_vt)ingest_table)rgtt WHERE [OVER]_STATUS = 'F' 

例外:

com.microsoft.sqlserver.jdbc.SQLServerException: 表示在期望条件的上下文中指定的非布尔类型, 靠近'_RAN'。

我该如何解决这个问题?

+0

我不确定除了显然通过JDBC执行查询之外,Java是如何涉及的。除此之外,我假设'[OVER] _RAN'是问题。我不太了解SQL Server,所以我不知道'[OVER]'是什么意思,但我会认为它不符合你的期望。 – Thomas

+0

另一件可能成为问题的事情是:我会说在'... ELSE'P'END [OVER] _STATUS FROM ...'中的'END'和'[OVER] _STATUS'之间缺少一个逗号。您是否尝试直接在数据库上执行该查询,即通过使用某个本机客户端? – Thomas

+0

sql server有一个关键字OVER子句,所以在这个查询中'SELECT [OVER] AS [OVER] _RAN FROM S_3000_7_vt',OVER是表的列名,如果我给SELECT OVER AS OVER_RAN FROM S_3000_7_vt)它将OVER视为子句@Thomas – vm101

回答

0

解决这样说:

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS ROW_NUM_VAL, CASE WHEN ingest_table.OVER_RAN BETWEEN '10' AND '12' THEN 'F' ELSE 'P' END OVER_STATUS FROM(SELECT [OVER] AS OVER_RAN FROM S_3000_7_vt)ingest_table)rgtt WHERE OVER_STATUS = 'F' 

保持列[OVER],从[OVER] _STATUS TO OVER_STATUS,[OVER]刚换了别名_RAN TO OVER_RAN

0

您错过,CASE ... END状态,和[OVER]_STATUS从哪里。

将其更改为

SELECT * 
FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS ROW_NUM_VAL, 
     CASE 
      WHEN ingest_table.[OVER]_RAN BETWEEN '10' AND '12' 
        THEN 'F' 
     ELSE 'P' END, 
     [OVER]_STATUS -- ?????? 
    FROM 
     (
      SELECT [OVER] AS [OVER]_RAN 
      FROM S_3000_7_vt 
     )ingest_table -- do not have [OVER]_STATUS 
)rgtt 
WHERE [OVER]_STATUS = 'F' 
相关问题