2017-02-16 27 views
0

У меня есть запрос, как этотИспользование переменной в выберите

SELECT ID, ... , 
     (SELECT MAX(EndDate) FROM Projects) As NewestDate, 
     (CASE 
      WHEN (NewestDate > NOW()) THEN 'More Work is coming' 
      ELSE 'Send Vendors to work' 
     END) Message 
FROM SOME_TABLE 

т.е. я пытаюсь использовать значение NewestDate внутри корпуса. Это возможно? или что-то вроде этого возможно?

Благодаря

ответ

1

Непосредственно Нет, вы можете использовать тот же оператор дважды, хотя:

SELECT ID, ... , 
     (SELECT MAX(EndDate) FROM Projects) As NewestDate, 
     (CASE 
      WHEN ((SELECT MAX(EndDate) FROM Projects) > NOW()) 
      THEN 'More Work is coming' 
      ELSE 'Send Vendors to work' 
     END) Message 
FROM SOME_TABLE 

Если вы хотите использовать уже вычислили один, использовать подзапрос:

select t.*, 
    (
     case 
      when (NewestDate > NOW()) 
       then 'More Work is coming' 
      else 'Send Vendors to work' 
      end 
     ) Message 
from (
    select ID, 
     ..., 
     (
      select MAX(EndDate) 
      from Projects 
      ) as NewestDate 
    from SOME_TABLE 
    ) t; 
0

Вы можете присоединиться к самой новой дате. Это будет быстрее, чем подзапрос каждой строки.

SELECT ID, ... , 
     nd.NewestDate, 
     (CASE 
      WHEN (nd.NewestDate > NOW()) THEN 'More Work is coming' 
      ELSE 'Send Vendors to work' 
     END) Message 
FROM SOME_TABLE 
JOIN (
    SELECT MAX(EndDate) AS NewestDate FROM Projects 
) nd