2014-09-04 18 views
2

下面的case語句有什麼問題?在sql視圖中檢查值是否爲數字

如果該值是數值,那麼我想檢查它是否大於或等於5,如果返回1,則返回1否則返回0.是否有任何優雅的方式來做到這一點?

下面的情況是嵌套在另一起案件中

CASE 
    WHEN(
     xyz <> a 
     AND abc <> 3 
     AND 
      CASE 
       WHEN ISNUMERIC(LEFT(o.RepCode, 1)) = 1 THEN 
        CASE 
         WHEN CONVERT(INT, LEFT(o.RepCode, 1)) >= 5 THEN 1 
         ELSE 0 
        END 
       ELSE 0 
      END 
    ) 
    THEN 1 
    ELSE 0 

我得到第一種情況下下面的錯誤之後的第二及何時ISNUMERIC()

An expression of non-boolean type specified in a context where a condition is expected. 

回答

5

在你最case語句缺少標準:

CASE 
    WHEN(
     xyz <> a 
     AND abc <> 3 
     AND 
      CASE 
       WHEN ISNUMERIC(LEFT(o.RepCode, 1)) = 1 THEN 
        CASE 
         WHEN CONVERT(INT, LEFT(o.RepCode, 1)) >= 5 THEN 1 
         ELSE 0 
        END 
       ELSE 0 
      END = ? -- Missing criteria 
    ) 
    THEN 1 
    ELSE 0 

編輯:不知道有格式化這是一個理想的方式,但我發現下面的更容易遵循:

CASE WHEN ( xyz <> a  
      AND abc <> 3 
      AND CASE WHEN ISNUMERIC(LEFT(o.RepCode, 1)) = 1 
        THEN CASE WHEN CONVERT(INT, LEFT(o.RepCode, 1)) >= 5 
           THEN 1 
           ELSE 0 
         END 
        ELSE 0 
       END = ? -- Missing Criteria 
      ) 
    THEN 1 
    ELSE 0 
END 
+0

'最外層的情況下statement'這不是最外層。這是在中間的排序 – 2014-09-04 21:43:56

+0

@ConradFrix我認爲最外層的case語句的WHEN缺少比較。 – 2014-09-04 21:46:41

+0

最後的END應該等於什麼? 0還是1? – user793468 2014-09-04 21:48:27