如何从一个SQL Case子查询中返回多个值而不进行分组

1 人关注

我有以下SQL查询,其中CASE语句需要返回多个值。

select TASK_NAME 
from TASK 
where TASK_TYPE in (          
        when (select USER_COUNTRY from USER) in (select COUNTRY_NAME from COUNTRY where CONTINENT = 'Europe') then ('Adhoc', 'Resell')
        when (select USER_COUNTRY from USER) in (select COUNTRY_NAME from COUNTRY where CONTINENT = 'Americas') then ('Classified', 'Bought', 'Handle')
        else ('None', 'Blank')
    end )

然而,WHEN子句的数量并不固定,因为可能有更多的条件。我不认为SQL从CASE语句中返回多个值会有效。

我还应该补充一点,这个查询所传递的应用程序不承认分组。

我为没有提供表格而感到抱歉。我将在适当的时候这样做。只是想把这个问题说出来。

1 个评论
你说的 "需要返回多个值 "是什么意思?案例语句的设计功能是这样的--第一个为真的条件将被返回。听起来你需要一个连接,而不是一个CASE。
sql
sql-server
sql-server-2008
tsql
Confounder
Confounder
发布于 2015-01-28
1 个回答
Gordon Linoff
Gordon Linoff
发布于 2015-01-28
0 人赞同

你可以把比较移到 when 子句中,并让 case 返回一个表示匹配的标量值。

where 1 = (case when (select USER_COUNTRY from USER) in (select COUNTRY_NAME from COUNTRY where CONTINENT = 'Europe') and Task_Type IN ('Adhoc', 'Resell')
                then 1
                when (select USER_COUNTRY from USER) in (select COUNTRY_NAME from COUNTRY where CONTINENT = 'Americas') and Task_Type IN ('Classified', 'Bought', 'Handle')
                then 1
                when Task_Type IN ('None', 'Blank')