2016-08-12 4 views
0

У меня есть таблица, как показано ниже,Как рассмотреть еще один столбец, в котором условие, если один столбец является нулевым

Order_id  Created_Date  Approved_Date 
_______________________________________________ 
1    2016-08-01   2016-08-05 
2    2016-07-01   2016-07-04 
3    2016-06-01   NULL 


Select * from table1 where Approved_date between '2016-05-01' and '2016-08-31' 

Если Approved_date является NULL, то следует рассмотреть вопрос о CREATED_DATE динамически.

ответ

1
Select * from table1 
where coalesce(Approved_date, Created_Date) between '2016-05-01' and '2016-08-31' 

или продолжать делать использование индексов

Select * from table1 
where 
(
    Approved_date is not null 
    and Approved_date between '2016-05-01' and '2016-08-31' 
) 
or 
(
    Approved_date is null 
    and Created_Date between '2016-05-01' and '2016-08-31' 
) 
+1

Вы перепутали даты во втором запросе. (И я сомневаюсь, что SQL Server будет использовать индекс для этого запроса, но, возможно, стоит попробовать. Жаль, что SQL Server не поддерживает индексы функций, где вы просто индексируете 'coalesce (approved_date, created_date)'.) –

0

Используйте COALESCE:

SELECT t1.Order_id, 
     t1.Created_Date, 
     COALESCE(t1.Approved_Date, t1.Created_Date) 
FROM table1 t1 
WHERE Approved_date BETWEEN '2016-05-01' AND '2016-08-31' 

От documentation:

Оценивает аргументы в порядке и возвращает ток значение первого из которое первоначально не оценивается в NULL.

Другими словами, в приведенном выше запросе Approved_Date будет использоваться, если он не NULL, в противном случае это был запасной вариант к Created_Date.

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