is it wrong if i expect that SQL understands that it should check every single rows to see if S.PersonID is null?
select OrderQty as 'OrderQty',
case
when (select S.PersonID from Sales.Customer as S) is null then 1
else 2
end as 'CaseResult'
from sales.SalesOrderDetail
error: Subquery returned more than 1 value.
if it is wrong then why it understands that it should check every rows one by one in the example below?
select Name,
case ProductCategoryId
when 1 then 'red'
when 2 then 'black'
else 'white
end as 'categoryname'
from production.productcategory
How can i write the first code so that it works like the second code?
2
Answers
You can’t use subqueries inside CASE
Also, you are not doing a join between SalesOrderDetail and Customer
You need a correlated subquery, to get it running correctly
fiddle
If you have a query that has multiple rows as resultset you need to add a LIMIT to the subquery
fiddle