2015-09-02 39 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