为什么这两种情况不相同

时间:2018-02-10 11:02:21

标签: sql-server database case

我已经编写了一个sql查询,检查 @Collegein 不等于0,如果是这样的话,那么根据其他方式获取college_code适用于所有大学。我已经使用过这种技术但从未尝试过对于多元化。我在"其中"

College_code in (CASE WHEN  @Collegein != '0' THEN  (SELECT items FROM dbo.Split(@Collegein, ',')) ELSE College_code  END)

这适用于 @Collegein =' 1' ,但 @Collegein =' 1,2' 失败, error子查询返回多个值。
虽然以下代码适用于 @Collegein =' 1,2'

College_code in (select * from dbo.Split(@Collegein ,','))

对于这种或替代解决方案,可能的解决方案是什么?还有一件事,为什么" in"不在这里工作

2 个答案:

答案 0 :(得分:0)

这不起作用。虽然IN明确处理多个值,但CASE只能返回一个值。因此,您的案例中的子查询应返回单个值,这就是您收到错误的原因。你必须在这里使用OR

@Collegein = '0'
OR
(
   @Collegein != '0'
   AND College_code IN(SELECT items FROM dbo.Split(@Collegein, ','))
)

答案 1 :(得分:0)

试试这个:

@Collegein = '0' 
OR 
EXISTS(SELECT items FROM dbo.Split(@Collegein, ',') WHERE Items = College_code)

添加(基于托马斯的答案):

@Collegein = '0'
OR
College_code IN(SELECT items FROM dbo.Split(@Collegein, ','))