sql - Case 语句多个 Then 值

标签 sql case

不确定这是否有意义,我正在尝试编辑现有存储过程以将变量添加到“Where”子句以返回所有值、无值或每条记录而不考虑值。

我在 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

设置是如果它是 Y,则只返回员工和他们的家人,如果 N 则不返回任何员工或他们的家人,如果变量为 NULL,则返回所有内容。

我不知道我在这里搞砸了什么,我一直在 Y 部分的 = 上出错。

最佳答案

您应该能够使用以下 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
)

关于sql - Case 语句多个 Then 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162046/

相关文章:

SQL Server 2005 - 变量内容丢失

php - 如果匹配查询中的 case 条件,则除以列值

sql - 在 2 个案例参数(日期范围和行数)之间循环 | SQL Server 2012

mysql - postgresql 中的 "Subquery must return only one column"错误

sql-server - 排序依据和大小写

mysql - 错误1215 MYSQL 无法添加外键约束,

sql - 它有什么作用。?

bash - 在单行 Bash 脚本中设置变量

java - JFreechart查看具体数据

sql - 根据 SQL Server 中的新/旧值更新其他记录的优先级