2013-02-01 3 views
0

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

Например, если я иметь следующую структуру:

calculated_result  result_one  result_two  result_three 
1      2.50   3.40   2.90 
2      1.90   2.00   3.90 
1      1.30   2.23   1.50 

Тогда я хочу, чтобы сделать поиск, где он должен вернуть все результаты, где calculated_result 1 и result_one выше, что 2,30 и меньше или равна 2,65 ,

Проблема в том, что я не знаю, как возвращать строки, которые вписываются в поиск пользователя.

calculated_result = 1 следует проверить result_one больше и меньше, чем содержание строк calculated_result = 2 следует проверить result_two является больше и меньше, чем содержание строк и т.д.

Надеются, что это имеет смысл.

+0

Дайте нам заявление SQL, который вы используете прямо сейчас ... Мы не делаем домашнее задание –

+0

Вы пробовали использовать 'CASE'? – Kermit

+0

Проблема в том, что я не знаю, как это сделать. Кто-нибудь, кто может дать мне какие-то подсказки или просто помочь вместо таких комментариев? :-) –

ответ

4
select * 
from myTable 
where (calculated_result = 1 and result_one between 2.30 and 2.650) 
or  (calculated_result = 2 and result_two between 2.30 and 2.650) 
or  (calculated_result = 3 and result_three between 2.30 and 2.650) 

или, если вы хотите использовать case

select * 
from myTable 
where case 
      when calculated_result = 1 then result_one 
      when calculated_result = 2 then result_two 
      when calculated_result = 3 then result_three 
     end between 2.30 and 2.650 
+0

Это решение работает отлично, спасибо! –

0

Попробуйте

SELECT 
     * 
FROM 
     table_name 
WHERE 
     calculated_result = 1 AND 
     result_one > 2.30 AND 
     result_one <= 2.65 
+0

Это пропустит поле «выберите [правильное]». Вопрос немного сложно расшифровать. –

0

Другое:

select * 
from myTable 
where calculated_result in (1, 2, 3) and 
(result_one between 2.30 and 2.650 or result_two between 2.30 and 2.650 
or result_three between 2.30 and 2.650) 
; 

DEMO

+0

Это пропустит «выбрать [правильное] поле« бит ». –

+0

@pst спасибо за указание, что вне ':)' BTW [Demo ничего не возвращает ни для какого из запросов здесь] (http://sqlfiddle.com/#!2/af6d5/5) – bonCodigo

1

Вы можете попробовать использовать CASE operator.

SELECT * FROM yourTable 
WHERE (CASE 
    WHEN calculated_result = 1 THEN result_one 
    WHEN calculated_result = 2 THEN result_two 
END) > 2.3 
AND (CASE 
    WHEN calculated_result = 1 THEN result_one 
    WHEN calculated_result = 2 THEN result_two 
END) <= 2.65 
Смежные вопросы