所以我有一个包含两个布尔列的表,称为“master”和“edition”。这个表不是我做的,是别人做的,表已经填满了很多数据,我不能改变它,所以这就是我必须处理的。
现在需要这样做:我需要执行一个 SELECT 语句,将主列和版本列合并到一个新列中。新列应包含字母“m”(当 master 为 1)、“e”(当 edition 为 1)或“u”(当两者均为 0)。现在我不知道该怎么做。有人可以帮我吗?
所以我有一个包含两个布尔列的表,称为“master”和“edition”。这个表不是我做的,是别人做的,表已经填满了很多数据,我不能改变它,所以这就是我必须处理的。
现在需要这样做:我需要执行一个 SELECT 语句,将主列和版本列合并到一个新列中。新列应包含字母“m”(当 master 为 1)、“e”(当 edition 为 1)或“u”(当两者均为 0)。现在我不知道该怎么做。有人可以帮我吗?
试试这个:
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
有多种方法可以做到这一点。使用CASE
是最简单的,还有一个:如果没有带有master=1
and的行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
如果您需要更新新列的值,可以使用以下查询:
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
请在此处查看小提琴。
u
如果两个值都为假,m
如果 master 为真,e
如果 edition 为真,me
如果它们都为真,这将返回。