изменить где заявление с учетом случая - PullRequest
0 голосов
/ 26 мая 2020

У меня есть таблица с информацией о пользователях. со столбцами:

  • id_staff
  • email
  • id_supervisor
  • id_branch
  • id_department

и я хочу выбрать информацию в этой таблице в зависимости от переменной, например

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
)

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

Используйте логическое логическое значение c. Кажется, вы хотите:

SELECT * 
FROM users 
WHERE 
    (@user_type = 'manager' AND id_branch = 3 AND id_department = 9)
    OR (@user_type <> 'manager' AND id_supervisor = 15)
1 голос
/ 26 мая 2020

Части THEN выражений CASE дают значения . Они не могут производить дальнейшие логические выражения. Чтобы решить эту проблему, вы должны переместить все logi c в части 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
0 голосов
/ 26 мая 2020

Вы можете использовать такое выражение 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
...