2017-02-20 9 views
-6

Предположим, что у меня есть таблица вроде этого:SQL: Показать столбец только если есть данные в нем

name | age | experience 
abc | 18 | 0 
def | 19 | 0 
efg | 20 | 0 

Я хочу, чтобы выбрать столбец опыта только если одно значение больше нуля. В этом случае мой запрос SQL должен возвращать только имя и возраст, а не опыт.

Если опыт let говорит, что «efg» больше 0, запрос должен возвращать имя, возраст и опыт. Я попытался следующий запрос

SELECT EXISTS (SELECT name,age,experience FROM emp_info) 
    AND NOT 
    EXISTS (SELECT experience FROM emp_info WHERE experience=0); 

Но это не работает.

+0

Предоставьте лучшие примеры. –

+0

Как это не работает? Кроме того, немного запутался ... Если опыт> 0, то только выберите столбец опыта? Или вы имеете в виду, если опыт <= 0, затем выберите другие 2 столбца, поэтому опыт показывается только там, где он> 0? – David

+0

Используете ли вы MySQL или MS SQL Server или Oracle? Не помещайте те продукты, которые не задействованы. – jarlh

ответ

1

Попробуйте это: -

IF ((select max(experience)FROM emp_info) > 0) 
    SELECT name,age,experience FROM emp_info 
ELSE 
    SELECT name,age FROM emp_info 
0

Это может работать:

if(experience > 0) 
    begin 
    SELECT name,age,experience FROM emp_info 
    end 
else 
    begin 
    SELECT name,age FROM emp_info 
    end 
1

Почти во всех реляционных базах данных, ваши запросы должны вернуть фиксированные номера столбцов, то есть такое же количество столбцов для всех строк. Так что вы просите, это не разумно. Вероятно, вы можете получить что-то подобное, чтобы работать с Informix из-за поддержки стоп-дисков, но это единственное, о чем я могу думать.

Другие варианты, которые у вас есть, включают в сериализацию JSON в вашем запросе или генерацию XML, но это немного продвинуто для этого, и это не ясно, это то, что вы хотите.

Обычно мы обрабатываем это на переднем конце, а не в запросе базы данных.

1
SELECT name, age, NULLIF(experience, 0) from emp_info 

Ваш вопрос отчасти сложно, потому что возвращение другого набора колонки в зависимости от результата, может быть, не то, что вы хотите сделать, вы можете сделать это прямо из вашего кода, а не из вашего прогноза SQL.