SQL - Select 基于相同条件的两个不同值

SQL - Select two different values based on the same condition

是否可以在 SQL 中使用 case 语句 select 基于相同条件的两个不同值?

例如,如果我有一个名为 Person 的 table,包含以下列:

所以如果这个人年满 18 岁或以上,我想 select 他们的名字。但是如果他们不到 18 岁,我想 select 他们的眼睛颜色。我如何使用案例陈述来做到这一点?

示例数据:

NAME    AGE    EyeColor
------  -----  --------
John    17     Brown
Mike    21     Blue
Peter   16     Green
Alan    18     Brown

预期结果:

NameOrEyeColor
--------------
Brown
Mike
Green
Alan

这样就可以了

SELECT CASE WHEN age = 18 THEN name 
WHEN age < 18 THEN eyeColor END AS mySelection
FROM my_table

如果两列的数据类型相同,则:

select
  case
    when age >= 18 then name
    else eyecolor
  end as columnname
from person

虽然在 Mysql 数据库中,由于完成了隐式转换,这适用于具有不同数据类型的列(检查 this link)。

一种方法是简单地为每个条件使用 CASE STATEMENT

SELECT (CASE WHEN Age = 18 THEN Name END) AS Name, (CASE WHEN Age < 18 THEN EyeColour END) AS EyeColour
FROM Person

或者,您可能正在寻找:

SELECT (CASE WHEN Age = 18 THEN Name WHEN Age < 18 THEN EyeColour END) as Condition
FROM Person

尽管最后一个选项会给您带来不明确的结果。如果此人的名字是 Blue 怎么办?

您可以在 select

中使用 IF 语句

例如

SELECT
IF(Age > 18, Name, EyeColor) as val
FROM table

https://dev.mysql.com/doc/refman/8.0/en/if.html