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
是否可以在 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