2015-09-02 63 views
1

有什麼辦法,使這項工作:SQL CASE在SELECT和WHERE選擇行

SELECT *, CASE WHEN a=0 THEN "test1" 
       WHEN a=1 THEN "test2" 
     END AS a FROM table WHERE a LIKE "%test%" 

所以應該給我的所有行a=0 or a=1。關鍵是我需要使用字符串「test」來搜索這些行。

+0

是的,只是不要忘記你的'FROM '條款 – uri2x

+0

FROM?所以我希望在這個問題上提出一個secound查詢? – dragonn

回答

0

你可以試試這個:

SELECT * FROM 
    (SELECT *,CASE WHEN a=0 THEN "test1" 
        WHEN a=1 THEN "test2" 
      END AS b 
    FROM TableA) TableB 
WHERE b LIKE "%test%" 

Sqlfiddle

在情況下,如果要覆蓋領域:

SELECT * FROM 
    (SELECT CASE WHEN a=0 THEN "test1" 
      WHEN a=1 THEN "test2" 
    ELSE a 
    END AS a 
    FROM TableA) TableA 
WHERE a LIKE "%test%" 

Sqlfiddle

+0

這就是我需要的一部分,但是如果我想在一張桌子裏面做這個並覆蓋那個,怎麼辦? – dragonn

+0

增加了用於覆蓋表的字段a的選擇語句。請嘗試。 –

0

如果你想要的所有行,其中a = 0或= 1,你可以使用運營商

SELECT * FROM table WHERE a IN (0,1) 

但是,如果你真的想使用情況下,您需要聲明

+0

是的,我只是忘記了,但那不是重點。我不會通過使用字符串「test」來搜索行。這就是爲什麼我使用CASE – dragonn

0

有兩個CASE語句,一個用於陳述,第二個用於表達式(你需要)。你應該這樣做這些 -

SELECT CASE a WHEN 0 THEN 'test1' WHEN 1 THEN 'test2' END 

這是一個語法 - Control Flow Functions

0
SELECT 
    *, 
    (CASE a 
     WHEN 0 THEN "test1" 
     WHEN 1 THEN "test2" 
    END) as a_txt 
FROM tableXY 

說不上你想要做的,其中 「%測試%」

1

給予情況在像什麼,

SELECT * FROM table WHERE (CASE WHEN a=0 THEN "test1" 
       WHEN a=1 THEN "test2" 
     END) LIKE "%test%" 
+0

這會給出接受的答案,只是嘗試 – nazark

+0

確實,對不起,我誤解了你昨天寫的東西。 – Asenar