所以我有一个包含两个名为“master”和“edition”的布尔列的表。我没有制作这张桌子,有人制作了这张桌子,桌子上已经装满了很多数据,我无法改变它,所以这就是我必须要做的事情。
现在需要: 我需要做一个SELECT语句,我将master和edition列组合成一个新列。新列应包含字母'm'(当master为1时),'e'(当版本为1时)或'u'(当两者都为0时)。现在我不知道该怎么做。有人可以帮我吗?
答案 0 :(得分:1)
试试这个:
select
CASE
WHEN master = 0 and edition = 0 THEN 'u'
WHEN master = 1 and edition = 0 THEN 'm'
WHEN master = 0 and edition = 1 THEN 'e'
ELSE '???' -- when either are one???
END
from myTable
答案 1 :(得分:0)
有多种方法可以做到这一点。使用CASE
是最简单的,还有另一个:
如果没有master=1
和edition=1
的行,则可以使用:
select *, 'm' from table where master=1
union
select *, 'e' from table where edition=1
union
select *, 'u' from table where edition=0 and master=0
答案 2 :(得分:0)
如果您需要更新新列的值,可以使用此查询:
UPDATE
tablename
SET
new = CASE WHEN NOT (master OR edition) THEN 'u'
ELSE
CONCAT_WS('',
CASE WHEN master THEN 'm' END,
CASE WHEN edition THEN 'e' END)
END
请参阅小提琴here。
如果两个值均为false,则返回u
;如果master为true,则返回m
;如果版本为true,则返回e
;如果两者都为真,则返回me
。