2016-03-15 40 views
1

我在sql中苦于下面的逻辑,假设我的每个员工都有一个员工类型,例如'E'=员工,'N'=非员工,'S'=暂停。在我的单选按钮中,我有这三个状态,并且我还有一个全单选按钮,用户可以在其中显示全部三种员工类型。为了显示这些相应的数据,我正在使用一个存储过程。我有下面的代码,但不知何故,它不工作,我设法显示'E','N'和'S'员工类型,但是当我选择'A'时,它只显示员工类型,它是null或列中的empty,但我想要的是显示所有员工类型。下面是我的代码:(我想是显示所有这三个列入当我选择了所有空型)在SQL中使用case子句

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 = e.emp_type 
+0

试图改变这里的条件WHERE @emp_type = e.emp_type或@emp_type ='A'' –

回答

2

where子句限制返回的行来行与@emp_type = e.emp_type - 以此来回报所有行时@emp_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 

或者,更优雅,与in操作:

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) 
+0

不错的工作,感谢您的帮助。 :) – RedRocket

+0

我的评论的好副本。 –