在SQL中使用case子句
我在sql中遇到以下逻辑,假设我的每个员工都有一个员工类型,例如“E”=员工,“N”=非员工,“S”=挂起。在我的单选按钮中,我有这三种状态,还有一个all单选按钮,用户可以在其中显示所有三种员工类型。为了显示这些相应的数据,我使用了一个存储过程。我在下面有这些代码,但不知何故它不起作用,我设法显示“E”、“N”和“S”员工类型,但当我选择“A”时,它只显示员工类型,在列中它是在SQL中使用case子句,sql,select,Sql,Select,我在sql中遇到以下逻辑,假设我的每个员工都有一个员工类型,例如“E”=员工,“N”=非员工,“S”=挂起。在我的单选按钮中,我有这三种状态,还有一个all单选按钮,用户可以在其中显示所有三种员工类型。为了显示这些相应的数据,我使用了一个存储过程。我在下面有这些代码,但不知何故它不起作用,我设法显示“E”、“N”和“S”员工类型,但当我选择“A”时,它只显示员工类型,在列中它是null或empty,但我想要的是显示所有员工类型。下面是我的代码:(我想要的是当我选择all时显示所有三个包含的空类型
null
或empty
,但我想要的是显示所有员工类型。下面是我的代码:(我想要的是当我选择all时显示所有三个包含的空类型)
where
子句将返回的行限制为具有@emp\u type=e.emp\u type
的行-要在@emp\u type
作为'A'
传递时返回所有行,需要将其添加到条件中:
SELECT CASE WHEN e.emp_type IS NULL OR
e.emp_type = '' OR
@emp_type = 'A'
THEN 'A'
ELSE e.emp_type END AS emp_type
FROM t_gc_emp e
WHERE @emp_type = 'A' OR @emp_type = e.emp_type
或者,更优雅地说,在操作符中使用:
SELECT CASE WHEN e.emp_type IS NULL OR
e.emp_type = '' OR
@emp_type = 'A'
THEN 'A'
ELSE e.emp_type END AS emp_type
FROM t_gc_emp e
WHERE @emp_type IN ('A', e.emp_type)
尝试将where条件更改为thiswhere@emp\u type=e.emp\u type或@emp\u type='A'
干得好,谢谢您的帮助。:)我的评论很好。
SELECT CASE WHEN e.emp_type IS NULL OR
e.emp_type = '' OR
@emp_type = 'A'
THEN 'A'
ELSE e.emp_type END AS emp_type
FROM t_gc_emp e
WHERE @emp_type IN ('A', e.emp_type)