Reputation: 1160
I want to bring back the county Id and the county name. How can I fix this query?
DECLARE @test int = 0;
select
CASE (@test)
when 0 then (SELECT co.Id, co.Description
FROM Dictionary.Counties as co
INNER JOIN CountyCollaboration as cc on cc.CountyId = co.Id
WHERE cc.CollaborationId = (SELECT cc1.CollaborationId from CountyCollaboration as cc1
WHERE cc1.CountyId = 34))
END
I get the error only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
If I comment out co.Description
so I'm only bringing back co.Id
, I get a different error: subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >, >=, or when the subquery is used as as expression.
Upvotes: 0
Views: 180
Reputation: 152566
Your subquery was returning multiple fields and possible multiple records. A subquery like this must always return one field and one record.
I'm guessing the INNER JOIN
is causing multiple records to be returned. If all of the records have the same value you can to a DISTINCT
or TOP 1
.
Upvotes: 0
Reputation: 20804
I suggest restructuring your query to look like this.
select id, country
from
(select co.id
, co.country
, case @test code for test goes here end caseresult
from all that stuff you have as a subquery in your question
) derivedtable
Upvotes: 1
Reputation: 28016
You can only return one expression from a CASE statement. Try using IF/ELSE instead.
The CASE statement in T-SQL is not a control flow statement like CASE/SWITCH in many programming languages.
Upvotes: 1