Case Statement Multiple Then值

use*_*329 2 sql case

不确定这是否有意义,我正在尝试编辑一个现有的sproc,将一个变量添加到"Where"子句中,以返回所有值,无值或每个记录,而不管Value.

我在Where子句中使用Case When/Then语句.

  WHERE 
      CASE (@work)
  WHEN 'Y' THEN part.corpid = ( 'Work EMP' , 'Work EMP 10' , 'Work FAM' )
  WHEN 'N' THEN part.corpid != ( 'Work EMP' , 'Work EMP 10' , 'Work FAM' )   
  ELSE part.corpid = *
  END
Run Code Online (Sandbox Code Playgroud)

设置是否为Y,然后仅返回员工及其家属,如果N则不返回任何员工或他们的家庭,如果变量中为NULL,则返回所有内容.

我不知道我在这里搞砸了什么,我在Y区继续犯错误.

Tar*_*ryn 8

您应该能够使用以下WHERE子句:

WHERE 
(
  @work = 'Y'
  AND part.corpid IN ( 'Work EMP' , 'Work EMP 10' , 'Work FAM' )
)
OR
(
  @work = 'N'
  AND part.corpid NOT IN ( 'Work EMP' , 'Work EMP 10' , 'Work FAM' )
) 
OR
(
  @work is null 
  -- add other filters here if needed
  -- no need to include the part.corpid because all will be included
)
Run Code Online (Sandbox Code Playgroud)