Замена вывода из оператора SQL другой строкой - PullRequest
0 голосов
/ 10 ноября 2018

В настоящее время у меня есть вывод, который заполняет таблицу. Один из результатов, которые он дает, - это год со стола ученика. Всякий раз, когда 6 выводится как год, мне нужно вернуть L6, а когда 7 выводится, мне нужен U6. Я сделал попытку ниже:

"$stmt = $conn->prepare(
              "SELECT st.Name AS student, st.House AS house, T1.Name AS T1, T2.Name AS T2, T3.Name AS T3
              CASE
                WHEN st.Year = 6 THEN 'L6'
                WHEN st.Year = 7 THEN 'U6'
                ELSE st.Year
              END CASE as year
              From Students AS st INNER JOIN Student_Choices AS sc
              ON st.Username = sc.Username INNER JOIN Current_DB AS db
              ON sc.DB_year = db.DB
              INNER JOIN Choices AS c1
              ON sc.T1_Choice = c1.Choice_ID
              INNER JOIN Sports AS T1
              ON c1.Sport_ID = T1.Sport_ID
              INNER JOIN Choices AS c2
              ON sc.T2_Choice = c2.Choice_ID
              INNER JOIN Sports AS T2
              ON c2.Sport_ID = T2.Sport_ID
              INNER JOIN Choices AS c3
              ON sc.T3_Choice = c3.Choice_ID
              INNER JOIN Sports AS T3
              ON c3.Sport_ID = T3.Sport_ID
              ");

Я тогда получаю ошибку:

errorSQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который можно использовать около 'CASE WHEN st.Year = 6 THEN' L6 'WHEN st.' в строке 2

Любое решение было бы здорово, спасибо.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Ответ таков:

SELECT st.Name AS student, st.House AS house,
              (CASE WHEN st.Year = 6 THEN 'L6' WHEN st.Year = 7 THEN 'U6' ELSE st.Year END) as year,
              T1.Name AS T1, T2.Name AS T2, T3.Name AS T3
              From Students AS st
              INNER JOIN Student_Choices AS sc
              ON st.Username = sc.Username INNER JOIN Current_DB AS db
              ON sc.DB_year = db.DB
              INNER JOIN Choices AS c1
              ON sc.T1_Choice = c1.Choice_ID
              INNER JOIN Sports AS T1
              ON c1.Sport_ID = T1.Sport_ID
              INNER JOIN Choices AS c2
              ON sc.T2_Choice = c2.Choice_ID
              INNER JOIN Sports AS T2
              ON c2.Sport_ID = T2.Sport_ID
              INNER JOIN Choices AS c3
              ON sc.T3_Choice = c3.Choice_ID
              INNER JOIN Sports AS T3
              ON c3.Sport_ID = T3.Sport_ID

СЛУЧАЙ должен быть в скобках, а год должен быть после того, как был выбран

0 голосов
/ 10 ноября 2018

Операторы case не могут так сидеть самостоятельно, они должны быть частью основного запроса. Удалите их и попробуйте

SELECT 
  st.Name AS student, 
  st.House AS house, 
  CASE 
    WHEN st.Year = 6 THEN 'L6' 
    WHEN st.Year = 7 THEN 'U6'
    ELSE st.Year 
  END CASE as year

... и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...