2014-01-17 5 views
0

У меня есть оператор where, который зависит от идентификатора и основывается на id, который определяется следующим. EX: если ID = 1, оператор where должен быть < = 3 и b между 4 и 7, если ID <> 1 где оператор должен быть < = 4 и b между 5 и 7. Не знаете, как это сделать. Пробовал статью Case, но не повезло.MIcrosoft SQL Server WHERE/CASE предложения

+3

Пожалуйста, покажите нам свой код! –

+0

Вы можете использовать 'OR' и' WHERE (a.ID = 1 AND a <= 3 AND b > = 4 и b <= 7) ИЛИ (a.id <> 1 AND a <= 4 AND b > = 5 и b <= 7) 'должны работать для вы. – user2989408

ответ

1

Что-то вроде:

where 
    (id = 1 and a <= 3 and b between 4 and 7) or 
    (id <> 1 and a <= 4 and b between 5 and 7) 
0

В зависимости от ваших требований вы просто должны WHERE заявления в скобках с OR:

... 
WHERE (ID = 1 AND a <= 3 AND b BETWEEN 4 AND 7) 
     OR (ID <> 1 AND a<= 4 AND b BETWEEN 5 AND 7) 
2

Вот пример таблицы в базе данных TempDb с данными.

-- Just a test 
use tempdb; 
go 

-- Drop table 
if object_id('test') > 0 
drop table test 
go 

-- Create table 
create table test 
(
    id int, 
    a int, 
    b int 
); 

-- Add data 
insert into test values 
(1, 3, 4), 
(2, 4, 5), 
(1, 4, 4), 
(2, 5, 5), 
(1, 3, 3), 
(2, 4, 4); 

-- Full table 
select * from test; 

Вот решение, использующее оператор CASE.

-- Show the data 
select 
    * 
from 
    test 
where 
    (
    case 
     when id = 1 and a <= 3 and b between 4 and 7 then 1 
     when id <> 1 and a <= 4 and b between 5 and 7 then 1 
     else 0 
    end 
) = 1; 

enter image description here

+0

большое вам спасибо! – MathLover

+0

Я рад, что могу помочь, мое удовольствие. –

Смежные вопросы