SQL Server SQL select return 0 if no records found, else return value

xjreopfe  于 2023-05-28  发布在  其他
关注(0)|答案(5)|浏览(158)

I am now using Microsoft SQL, my code is:

SELECT TOP 1 
   [avail]
   FROM [table1]
   where [name] = 'abc'
   order by [datetime] desc

I hope when [avail] exists, return the value of [avail], if not exists, return 0 or "Not Found"

Thanks!

hts6caw3

hts6caw31#

You can use this

SELECT ISNULL(( SELECT TOP 1 
   [avail]
   FROM [table1]
   where [name] = 'abc'
   order by [datetime] desc), 0) AS [avail]
jfewjypa

jfewjypa2#

You can do in two ways:

Use IF EXISTS way:

IF EXISTS (SELECT TOP 1 [avail] FROM [table1] WHERE [name] = 'abc' ORDER BY [datetime] DESC)
    SELECT TOP 1 [avail] FROM [table1] WHERE [name] = 'abc' ORDER BY [datetime] DESC
ELSE 
    SELECT 0 AS [avail]

or store the avail value into a variable and process, the only risk in this way is if the top 1 avail is returns empty value, then you will get the result as zero.

DECLARE @Avail AS VARCHAR(100) = ''; -- varchar of the `avail` data size

SELECT TOP 1 @Avail = [avail] FROM [table1] WHERE [name] = 'abc' ORDER BY [datetime] DESC;

IF @Avail = ''
    SELECT 0 AS [avail]
ELSE 
    SELECT @Avail AS [avail]
5sxhfpxr

5sxhfpxr3#

Try to use COALESCE. It selects the data from the first argument that has a nonnull value. If avail is not null, return [avale], otherwise return "Not Found"

SELECT COALESCE(avail, 'Not Found')
FROM table1
WHERE name = 'abc'
ORDER BY datetime desc

You can read about COALESCE in https://learn.microsoft.com/en-us/sql/t-sql/language-elements/coalesce-transact-sql

pbpqsu0x

pbpqsu0x4#

Or you can use sum() function, like this

select nvl(sum(columnA), 0) from your_table where your_condition;

It will return 0 if no rows are there

pxy2qtax

pxy2qtax5#

If its top 1 you want or remove top command

SELECT TOP 1 
   isnull([avail],'0')
   FROM [table1]
   where [name] = 'abc'
   order by [datetime] desc

相关问题