2014-02-28 99 views
0

請某人幫忙,我試圖做一個case語句在哪裏這樣的條款---請查看下面案例查詢失敗

SELECT pisca , 
      dropbox 
    FROM Images 
    WHERE pisca = 'A' 
      AND dropbox = CASE WHEN dropbox = 1 THEN 'Small' 
           WHEN dropbox = 2 THEN 'Medium' 
           WHEN dropbox = 3 
            OR dropbox = 4 THEN 'Large' 
          END 

查詢,但我正在以下錯誤消息

Msg 245,Level 16,State 1,Line 2 將varchar值'North'轉換爲數據類型int時轉換失敗。

我會很感激任何幫助。由於

+0

我不能直接幫你,但是我發現你首先比較'dropbox'和'int'(在CASE裏面),然後將它映射到'varchar'只是爲了比較這些'varchars'又一次到'dropbox'。 – Dirk

+0

從它似乎像列的DropBox被定義爲字符串,而不是整數的錯誤。確保您在CASE語句中使用的數據類型和值進行比較。 CASE語句的構建也不正確。 –

+1

這個where子句沒有意義。你在說「如果dropbox等於1,看看它是否等於」小「 –

回答

1

我想你想的:

SELECT 
pisca , 
CASE dropbox 
    WHEN 1 THEN 'Small' 
    WHEN 2 THEN 'Medium' 
    WHEN 3 OR 4 THEN 'Large' 
END dropbox 
FROM Images 
WHERE pisca = 'A' 
+1

我猜你是對的,這是他們的尋找,除非它是我在評論帽中說的,他們通過'int' @dropbox傳遞並將它與表中的字符串進行比較 –

-1

正如我提到的檢查數據類型,如果Dropbox的是字符串或int和基於使用的這一個。

如果如果你whant按名稱來過濾的Dropbox INT類型

SELECT pisca , 
      dropbox 
    FROM Images 
    WHERE pisca = 'A' 
      AND dropbox = CASE dropbox 
           WHEN 1 
            THEN 'Small' 
           WHEN 2 
            THEN 'Medium' 
           WHEN 3 
            THEN 'Large' 
           WHEN 4 
            THEN 'Large' 
          END 

如果輸入字符串

SELECT pisca , 
      dropbox 
    FROM Images 
    WHERE pisca = 'A' 
      AND dropbox = CASE dropbox 
           WHEN '1' 
            THEN 'Small' 
           WHEN '2' 
            THEN 'Medium' 
           WHEN '3' 
            THEN 'Large' 
           WHEN '4' 
            THEN 'Large' 
          END 
+1

這仍然沒有任何意義,讓我們說dropbox是'1' 。然後你會說'哪裏dropbox ='Small',即使你剛剛確認它是'1'。由於一列不可能是'1'和'小',所以它不能匹配任何行。 –

+0

yes我沒有把邏輯上的注意力集中在OP想要達到的目的上,我剛剛糾正了他寫的CASE語句,要麼OP正在尋找Siddique的查詢語句回答或CASE條件不基於Dropbox,但在其他一些列上,OP缺少該條件。其他明智的,爲什麼我會在哪裏條件dropBox和Case stmt也在同一列。 –

0

,像 '小' 嘗試這樣的事:

SELECT 
    I.pisca 
, D.DROPBOX 
FROM Images I 
INNER JOIN (
    SELECT 1 AS ID, 'Small' AS DROPBOX 
    UNION 
    SELECT 2 AS ID, 'Medium' AS DROPBOX 
    UNION 
    SELECT 3 AS ID, 'Large' AS DROPBOX 
    UNION 
    SELECT 4 AS ID, 'Large' AS DROPBOX 
) D 
    ON I.dropbox = D.ID 
WHERE 
    I.pisca = 'A' 
    AND D.DROPBOX = 'Small'