Оператор обращения и объединение

#mysql #sql #join #case #case-statement

#mysql #sql #Присоединиться #обращение

Вопрос:

Вопрос в том

ОБЪЕДИНИТЕ DEPT_EMP И ОТДЕЛЫ И СОТРУДНИКОВ и отобразите полное имя сотрудника, и если пол сотрудника равен M, то отобразите его как мужской, а если F, то женский, и назовите его Gender_Column.

Это то, что я придумал до сих пор:

 SELECT CONCAT(e.FIRST_NAME,' ', e.LAST_NAME) AS Full_name, e.Gender
From dept_emp de
JOIN departments d
ON de.dept_no = d.dept_no
JOIN employees e
ON de.emp_no = e.emp_no
        CASE
        WHEN E.gender = 'm' Then 'male'
        WHEN E.gender = 'f' Then 'female'
END
  

Однако я получаю сообщение об ошибке

 Msg 156, Level 15, State 1, Line 44
Incorrect syntax near the keyword 'CASE'
  

Ответ №1:

Когда вам нужно выполнить условное объединение столбцов, укажите CASE WHEN после JOIN .

CASE WHEN Условие фильтрации столбцов должно быть сразу после SELECT column с запятой, например

 SELECT player_name,
       weight,
       CASE WHEN weight > 250 THEN 'heavy-weight'
            ELSE 'light-weight' 
       END AS weight_group
  FROM football_players
  

Итак, в вашем вопросе решение должно быть

 SELECT CONCAT(e.FIRST_NAME,' ', e.LAST_NAME) AS Full_name, 
       e.Gender,
         CASE
           WHEN e.gender = 'm' THEN 'male'
           WHEN e.gender = 'f' THEN 'female'
         END AS Gender_Column
FROM dept_emp de
JOIN departments d
     ON de.dept_no = d.dept_no
JOIN employees e
     ON de.emp_no = e.emp_no
  

Ответ №2:

Вам нужно поместить регистр в select, а не в join.

   SELECT CONCAT(e.FIRST_NAME,' ', e.LAST_NAME) AS Full_name,e.Gender , 
CASE WHEN E.gender = 'm' Then 'male' WHEN E.gender = 'f' Then 'female' END as Gender_Text
     From dept_emp de JOIN departments d ON de.dept_no = d.dept_no JOIN employees e ON de.emp_no = e.emp_no 
  

Также нет псевдонима имени столбца, но это не ошибка.