Условное И в операторе выбора SQL Server - PullRequest
0 голосов
/ 10 мая 2018

У меня есть оператор выбора в хранимой процедуре, а @date - это параметр для хранимой процедуры.

Это мой код:

SELECT * 
FROM vw_A a               
INNER JOIN vw_B b ON a.id = b.id              
WHERE 
    a.imdt IS NULL     
    AND a.appflg = 'Y'                
    AND a.last_dt > cast(@date as datetime);    

Теперь в таблице vw_A также есть столбец Date prgDate.

Этот столбец может быть null, или он будет содержать значение datetime.

Я хочу изменить указанный выше запрос на выборку таким образом, чтобы

  • если prgDate равно null, то в приведенном выше операторе выбора используется условие (AND a.last_dt > cast(@date as datetime))
  • иначе оператор выбора должен использовать значение prgDate вместо last_dt в условии: (AND a.prgDate > cast(@date as datetime))

Как мне достичь этого в операторе select?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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

SELECT * 
FROM vw_A a               
INNER JOIN vw_B b ON a.id = b.id              
WHERE 
    a.imdt IS NULL     
    AND a.appflg = 'Y'                
    AND ISNULL(a.prgDate, a.last_dt) > cast(@date as datetime);
0 голосов
/ 10 мая 2018

Ты вместо этого, значит ...?

SELECT * 
FROM vw_A a               
     INNER JOIN vw_B b ON a.id = b.id              
WHERE a.imdt IS NULL     
  AND a.appflg = 'Y'                
  AND ((a.prgDate IS NULL AND a.last_dt > CAST(@date AS datetime))
   OR  a.last_dt IS NULL > CAST(@date AS datetime);   
...