У меня есть следующие 3 поля в одной таблице:
cell | home | primary
----------------------------------------------
111 2222 cell
456565 4654564 home
Я хочу получить значение cell
или home
на основе значения поля primary
.
Я пробовал следующее, что явно не работает ... но не могу понять, как преобразовать значение primary
, чтобы оно понималось как имя столбца:
SELECT
(SELECT primary FROM tblstudents WHERE studentid = 39358)
FROM
tblstudents WHERE studentid = 39358
Благодарность
3 ответа
Предложение case
, предложенное Сандипом, является правильным.
Я хочу отметить, что вы можете поместить это прямо в таблицу, используя вычисляемый столбец:
ALTER TABLE tblstudents add preferred as (CASE [primary] WHEN 'cell' THEN cell ELSE home END);
Это имеет то преимущество, что любой запрос, использующий таблицу, всегда использует одну и ту же логику для предпочтительного числа. Кроме того, если одно из значений поля изменится, тогда автоматически изменится preferred
.
Обратите внимание, что primary
- это зарезервированное слово SQL (например, «первичный ключ»), поэтому это очень плохой выбор для имени столбца. В общем, старайтесь избегать использования ключевых слов SQL в качестве идентификаторов.
На всякий случай, если вам не нравится селектор CASE:
SELECT cell phone FROM students WHERE PRIMARY='cell'
UNION
SELECT home phone FROM students WHERE PRIMARY='home'
select primary ,
case
when primary = 'cell' then cell
when primary = 'home' then home
END as phone
from tblstudents
WHERE studentid = 39358
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.