'top 1 case in select statement on TSQL
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?
Solution 1:[1]
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.
Solution 2:[2]
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
Solution 3:[3]
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
Solution 4:[4]
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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | RichardTheKiwi |
| Solution 2 | AgeDeO |
| Solution 3 | Sandeep Kumar |
| Solution 4 | Anvesh |
