SQL - выберите два разных значения на основе одного и того же условия - PullRequest
0 голосов
/ 22 октября 2019

Возможно ли в SQL иметь инструкцию case, которая выбирает два разных значения на основе одного и того же условия?

Например, если бы у меня была таблица с именем Person со следующими столбцами:

  • Имя
  • Возраст
  • EyeColor

Поэтому, если человеку 18 лет или старше, я хочу выбрать его имя. Но если им меньше 18 лет, я хочу выбрать цвет их глаз. Как я могу сделать это с помощью оператора case?

Образцы данных:

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

Ожидаемый результат:

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

Ответы [ 4 ]

3 голосов
/ 22 октября 2019

Если оба столбца имеют один и тот же тип данных, то:

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

, хотя в базе данных Mysql это будет работать для столбцов с различными типами данных из-за неявного преобразования (проверьте эту ссылку).

0 голосов
/ 22 октября 2019

Вы можете использовать оператор IF в select

Например

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

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

0 голосов
/ 22 октября 2019

Один из способов - просто использовать 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?

0 голосов
/ 22 октября 2019

Это сделает это

SELECT CASE WHEN age = 18 THEN name 
WHEN age < 18 THEN eyeColor END AS mySelection
FROM my_table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...