2017-10-16 117 views
1

我有一个表下方SQL查询来选择某些行

+++++++++++++++++++++++++ 
colA | colB | colC | colD 
+++++++++++++++++++++++++ 
1 | female | ... | ... 
2 | male | ... | ... 
3 |  | ... | ... 
4 | select | ... | ... 
5 | dfd | ... | ... 
+++++++++++++++++++++++++ 

给出我想选择与COLB“女性”或“男性”的所有行,也行空或“选择” colB中的值,但想将其重命名为“未知”。结果表应该是:

+++++++++++++++++++++++++ 
colA | colB | colC | colD 
+++++++++++++++++++++++++ 
1 | female | ... | ... 
2 | male | ... | ... 
3 | unknown| ... | ... 
4 | uknown | ... | ... 
+++++++++++++++++++++++++ 

我的查询语句:

SELECT colA, colB, colC, colD FROM table 
where (colB in ('female','male') and 
     case when colB = '' then 'unknown' 
      when colB = 'select' then 'unknown' end) 
+0

问题是什么? –

回答

2

你似乎想:​​

SELECT colA, 
     (CASE WHEN colB IN ('female', 'male') THEN colb ELSE 'unknown' END) as colB, 
     colC, colD 
FROM table 
WHERE colB in ('female', 'male', '') OR colB IS NULL; 
2

所以,你想有四个值的行,但你要以不同的方式呈现两种情况。

更改值的显示应该在选择列表中完成。

SELECT colA, 
    CASE WHEN colB IN ('','select') THEN 'unknown' ELSE colB END AS colB,  
    colC, colD 
FROM table 
WHERE colB IN ('','select','female','male');