简体   繁体   中英

SQL Server return NULL (or value) in case entry does not exist - Multiple Columns

I have a populated table with a 'Number' as PK . I would like a query which searches for a specific number, and if it is not found then it would return "NULL" not a no value.

I have managed to do it for one return:

SELECT (SELECT Risk_Impact FROM [dbo].[RFC] WHERE Number = 'RFC-018345')

However I would like to select multiple columns like:

SELECT (SELECT Risk_Impact, Risk_Impact, BI_TestingOutcome FROM [dbo].[RFC] WHERE Number = 'RFC-018345')

However it is giving me an error:

"Msg 116, Level 16, State 1, Line 1 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS."

Can you please assist?

Thank you in advance

Try

select p.* from (select 1 as t ) v
left join  (select * from [dbo].[RFC] WHERE Number = 'RFC-018345') p
on 1=1

在sql server中应该使用像这样的isnull函数

SELECT isnull((SELECT Risk_Impact FROM [dbo].[RFC] WHERE Number = 'RFC-018345'),0)

Refined @Sagar query:

And better indentation would probably be more helpful for people to learn from.

Ex: SELECT [dbo].[RFC].* FROM (SELECT 1 AS Col1) AS V CROSS JOIN [dbo].[RFC] WHERE Number = 'RFC-018345'

Edit: I got caught up in removing the subquery. Working query:

SELECT 
    [dbo].[RFC].* 
FROM 
    (SELECT 1 AS Col1) AS V
    LEFT JOIN 
    [dbo].[RFC] 
    ON Number = 'RFC-018345'

(I would also advocate to not SELECT *, anywhere near production, but to always be explicit about the columns in the result set. Ex:

SELECT 
    [dbo].[RFC].[Risk_Impact], 
    [dbo].[RFC].[BI_TestingOutcome]
FROM 
    (SELECT 1 AS Col1) AS V
    LEFT JOIN 
    [dbo].[RFC] 
    ON Number = 'RFC-018345'

)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM