Mam takie zapytanie

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

I.e. Próbuję użyć wartości newstdate wewnątrz obudowy. czy to możliwe? czy jest to takie możliwe?

Dzięki

0
Jose Cabrera Zuniga 16 luty 2017, 22:04

2 odpowiedzi

Najlepsza odpowiedź

Bezpośrednio Nie. Możesz użyć tego samego oświadczenia dwa razy:

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

Jeśli chcesz użyć już obliczonego, użyj podzewności:

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;
1
Gurwinder Singh 16 luty 2017, 19:06

Możesz dołączyć do najnowszej daty. Byłoby to szybsze niż podzewności każdego rzędu.

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
0
Alden W. 16 luty 2017, 20:28