Question

I am having problem on this query. How can I fix this:

select (select case top 1 STATUS 
       when 'Inprocess' then 'Processing' 
       when 'Inworkbin' then 'Waiting In Draft' 
       end 
    from ICS_EMAIL_CONNECTIONS_TRX A    
    where A.SESSIONID = B.SESSIONID 
    and STATUS <> 'Completed'
    order by A.CREATE_DATE desc) as LAST_STATUS 

I am getting this error:

Incorrect syntax near the keyword 'top'.

Any suggestions?

Was it helpful?

Solution

Try:

select top 1 case STATUS

instead of

select case top 1 STATUS 

OTHER TIPS

You don't need the nested select.

select top 1 case STATUS 
             when 'Inprocess' then 'Processing' 
             when 'Inworkbin' then 'Waiting In Draft' 
             end LAST_STATUS
from ICS_EMAIL_CONNECTIONS_TRX A    
where A.SESSIONID = B.SESSIONID 
and STATUS <> 'Completed'
order by A.CREATE_DATE desc;

Although this can return 0 rows whereas your original form with the TOP 1 written properly will always return one row, even if the value is NULL.

select (select top 1 (case STATUS 
   when 'Inprocess' then 'Processing' 
   when 'Inworkbin' then 'Waiting In Draft' 
   end) 
from ICS_EMAIL_CONNECTIONS_TRX A    
where A.SESSIONID = B.SESSIONID 
and STATUS <> 'Completed'
order by A.CREATE_DATE desc) as LAST_STATUS 

corrrect the case and top keyword

select (select top 1 case STATUS 
       when 'Inprocess' then 'Processing' 
       when 'Inworkbin' then 'Waiting In Draft' 
       end 
    from ICS_EMAIL_CONNECTIONS_TRX A    
    where A.SESSIONID = B.SESSIONID 
    and STATUS <> 'Completed'
    order by A.CREATE_DATE desc) as LAST_STATUS 
select top 1 * from (select case STATUS 
       when 'Inprocess' then 'Processing' 
       when 'Inworkbin' then 'Waiting In Draft' 
       end 
    from ICS_EMAIL_CONNECTIONS_TRX A    
    where A.SESSIONID = B.SESSIONID 
    and STATUS <> 'Completed'
    order by A.CREATE_DATE desc) as LAST_STATUS 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top