I have a select with subquery inside like
x
SELECT
.
, (SELECT TOP 1
[DDC].[ContractedAmount]
FROM @CustomersTable AS [DDC]
WHERE [DDC].[DesignKey] = [D].[DesignKey]) AS [Contracted Amount]
FROM .
But sometimes value of this select can be 0.00
so I want to add conditional if it’s 0.00 just return NULL, so I do an IIF
conditional like:
, IIF((SELECT TOP 1
[DDC].[ContractedAmount]
FROM @CustomersTable AS [DDC]
WHERE [DDC].[DesignKey] = [D].[DesignKey]) =
0.00,
NULL,
(SELECT TOP 1
[DDC].[ContractedAmount]
FROM @CustomersTable AS [DDC]
WHERE [DDC].[DesignKey] = [D].[DesignKey])) AS [Contracted Amount]
But as you can see I need to do another subquery in subquery, so I think this is not the best practice to achieve that? is there another way to do this more easy and readeable. Any suggestions? Regards
Advertisement
Answer
You could use NULLIF
:
Returns a null value if the two specified expressions are equal.
SELECT
NULLIF((subquery), 0.00) AS [Contracted Amount]
Another way is to use CROSS/OUTER APPLY
:
SELECT ,
IIF(sub.ContractedAmount = 0.00, NULL, sub.ContractedAmount) AS [Contracted Amount]
FROM tab
OUTER APPLY (SELECT TOP 1 [DDC].[ContractedAmount]
FROM @CustomersTable AS [DDC]
WHERE [DDC].[DesignKey] = [D].[DesignKey])) sub