0

所以我有一个包含两个布尔列的表,称为“master”和“edition”。这个表不是我做的,是别人做的,表已经填满了很多数据,我不能改变它,所以这就是我必须处理的。

现在需要这样做:我需要执行一个 SELECT 语句,将主列和版本列合并到一个新列中。新列应包含字母“m”(当 master 为 1)、“e”(当 edition 为 1)或“u”(当两者均为 0)。现在我不知道该怎么做。有人可以帮我吗?

4

3 回答 3

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
于 2013-07-30T10:55:55.907 回答
0

有多种方法可以做到这一点。使用CASE是最简单的,还有一个:如果没有带有master=1and的行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
于 2013-07-30T10:59:06.377 回答
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如果它们都为真,这将返回。

于 2013-07-30T11:04:18.213 回答