2011-02-27 2 views
0

Использование SQL Sever 2005Сравните дату из другой таблицы

Table1

ID StartDate EndDate 

001 02/23/2010 07/22/2010 
002 05/03/2010 null 
003 02/02/2011 null 
... 

Table2

Дата

02/24/2011 
02/25/2011 
... 
... 

Состояние

  • Если enddate не равно нулю, то startDate сравнить с макс (дата) от table2, если StartDate> 6 месяцев, то он должен отображаться как «Истек»

Как сделать запрос для указанного условия.

Нужна помощь по запросу.

+1

Пожалуйста, выкладываю код, который вы написали до сих пор. Люди обычно не любят просто писать свой код для вас. Как бы то ни было, это описание работы, а не вопрос. –

+2

Пожалуйста, попробуйте задать вопрос с CASE WHEN и т. Д. Это не выглядит сложным. – CarneyCode

ответ

2
Select 
    StartDate, 
    [Status]=Case 
     when DATEDIFF(m,StartDate,(Select MAX(Date) from Table2))>6 
     then 'Expired' 
     Else 'Valid' 
     end 

    From Table1 
    where EndDate is not null 
+0

Если вы отправляете код, образцы XML или данных **, пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

0
Select Case 
     When EndDate Is Not Null Then EndDate 
     When Table1.StartDate > DateAdd(mm, 6, T2.MaxDate) Then 'Expired' 
     End 
From Table1 
    Cross Join (
       Select Max([Date]) As MaxDate 
       From Table2 
       ) As T2 
0

Вопрос неполна

  1. Если EndDate не равно нулю, то STARTDATE сравнить с макс (дата) от table2
    • как сравнивать? больше чем? меньше, чем? равно?
  2. если StartDate> 6 месяцев, то он должен отображаться как «Истек»

Но давайте предположим, что вы имеете в виду

  1. Если EndDate не равно нулю, то STARTDATE сравнить с макс (дата) от table2
    • он истек, если enddate < max(date)
  2. иначе если StartDate старше 6 месяцев, то он должен отображаться как "Истек"

Тогда запрос становится

select 
    case when EndDate < MaxDate then 'Expired' 
     when EndDate is null and StartDate < DateAdd(m,-6,GetDate()) then 'Expired' 
     else 'OK' 
    end 
from Table1 T1 
cross join (select max(date) MaxDate from Table2) T2 
Смежные вопросы