在给定的情况下更改where语句

mklgxw1f  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(332)

我有一个包含用户信息的表。使用列:
身份证工作人员
电子邮件
id\U主管
id\分公司
身份证部门
我想根据一个变量来选择这个表中的信息,比如

DECLARE @user_type nvarchar(20) = 'manager'

我怎样才能换衣服 where 基于变量的语句
例子:

SELECT *
FROM users
WHERE 
(
   CASE WHEN @user_type = 'manager' THEN 
     id_branch = 3 AND id_department = 9
   ELSE
     id_supervisor = 15
)
cdmah0mi

cdmah0mi1#

使用布尔逻辑。你似乎想要:

SELECT * 
FROM users 
WHERE 
    (@user_type = 'manager' AND id_branch = 3 AND id_department = 9)
    OR (@user_type <> 'manager' AND id_supervisor = 15)
jgwigjjp

jgwigjjp2#

这个 THEN 部分 CASE 表达式产生值。它们不能产生更进一步的布尔表达式。要解决这个问题,必须将所有逻辑移到 WHEN 部分 CASE 表达式:

SELECT * 
FROM users 
WHERE 1 = CASE WHEN @User_type = 'manager' AND id_branch = 3 and id_deparment = 0
                    THEN 1
               WHEN @user_type <> 'manager' AND id_supervisor = 15 
                    THEN 1
               ELSE 0 END
qcbq4gxm

qcbq4gxm3#

你可以这样用case表达式

SELECT * FROM users 
WHERE 1 = CASE WHEN @user_type = 'manager' 
               THEN CASE WHEN id_branch = 3 AND id_department = 9
                         THEN 1
                         ELSE 0 END
               WHEN id_supervisor = 15
               THEN 1
               ELSE 0 END

相关问题