У меня есть следующие 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

Благодарность

1
kneidels 5 Сен 2016 в 16:48

3 ответа

Предложение case, предложенное Сандипом, является правильным.

Я хочу отметить, что вы можете поместить это прямо в таблицу, используя вычисляемый столбец:

ALTER TABLE tblstudents add preferred as (CASE [primary] WHEN 'cell' THEN cell ELSE home END);

Это имеет то преимущество, что любой запрос, использующий таблицу, всегда использует одну и ту же логику для предпочтительного числа. Кроме того, если одно из значений поля изменится, тогда автоматически изменится preferred.

Обратите внимание, что primary - это зарезервированное слово SQL (например, «первичный ключ»), поэтому это очень плохой выбор для имени столбца. В общем, старайтесь избегать использования ключевых слов SQL в качестве идентификаторов.

1
Gordon Linoff 5 Сен 2016 в 13:52

На всякий случай, если вам не нравится селектор CASE:

SELECT cell phone FROM  students WHERE PRIMARY='cell'
UNION
SELECT home phone FROM  students WHERE PRIMARY='home'
0
Maksim 5 Сен 2016 в 14:09
select primary ,
case 
    when primary = 'cell' then cell
    when primary = 'home' then home
END as phone
from tblstudents 
WHERE studentid = 39358
0
the.Legend 5 Сен 2016 в 13:51