2017-04-06 34 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' 
相關問題