2013-10-30 83 views
0

我想带回县名和县名。我该如何解决这个问题?sql case语句带回多个值

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 

我得到的错误only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

如果我注释掉co.Description所以我只带回co.Id,我得到一个不同的错误:subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >, >=, or when the subquery is used as as expression.

+1

如果你可以解释你为什么要这样做,可能会有一个简单的解决方法,避免任何'CASE'或'IF'语句。 – bendataclear

回答

1

您只能从一个CASE返回一个表达式声明。请尝试使用IF/ELSE。

在许多编程语言中,T-SQL中的CASE语句不是像CASE/SWITCH这样的控制流语句。

+1

事实上,在T-SQL中没有'CASE'语句。有一个'CASE' *表达式*,与其他*表达式*共同计算一个值。 –

+0

这正是我想要的,谢谢菲尔。只要它让我接受你的答案,我不得不再等几分钟。 – user1202606

1

我建议重构您的查询看起来像这样。

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 
0

你的子查询中返回多个领域和可能的多记录。像这样的子查询必须总是返回一个字段和一个记录。

我猜INNER JOIN导致多个记录被返回。如果所有记录的值都相同,则可以输入DISTINCTTOP 1