Я хочу добавить два новых поля в представление, которое не связано с таблицей с оператором case - PullRequest
0 голосов
/ 19 декабря 2018

1) Я создаю представление календаря, и я хотел бы добавить столбец, который проверяет, является ли дата в этой строке рабочим днем, если это так, затем заполните 1, иначе 0.

У меня естьтаблица со всеми выходными в Великобритании и в таблице календаря. У меня также есть поле 'dayoftheweek', где 1 и 7 - SUN и SAT.

В настоящее время я пытаюсь использовать оператор case, однако не могу запустить скрипт какполучить следующую ошибку:

Ошибка SQL (1064): в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '(CASE IF CT.dayofweek = `1` ИЛИ CT.dayofweek =` 7` ИЛИ CT.dt = PH`H' в строке 12 (отредактировано) Это мой сценарий:

ALTER VIEW Calendar_View AS
select `calendar_table`.`dt` AS `date`,
`calendar_table`.`year` AS `year`,
`calendar_table`.`quarter` AS `quarter`,
`calendar_table`.`month` AS `month`,
`calendar_table`.`day` AS `day`,
`calendar_table`.`dayofweek` AS `dayofweek`,
`calendar_table`.`monthName` AS `monthName`,
`calendar_table`.`dayName` AS `dayName`,
`calendar_viewtable`.`week` AS `week`,
`calendar_table`.`isWeekday` AS `isWeekday` 
(CASE    
    WHEN CT.dayofweek = `1`  THEN  `0'
    WHEN CT.dayofweek = `7`  THEN  `0`
    WHEN CT.dt = PH.`Holiday Date` THEN `0` 
      ELSE   `1`
    END CASE ) AS IsWorkingDay

from `calendar_table` CT, `Public_Holidays` PH

2) Я также хотел бы добавить другое поле, которое проверяет, является ли дата в календаре текущей датой, и поэтому заполните новое поле с помощью Да,иначе нет (я пытался использовать case case, это не сработало).

1 Ответ

0 голосов
/ 19 декабря 2018

Это ваш код:

(CASE WHEN CT.dayofweek = `1`  THEN  `0'
      WHEN CT.dayofweek = `7`  THEN  `0`
      WHEN CT.dt = PH.`Holiday Date` THEN `0` 
      ELSE   `1`
 END CASE ) AS IsWorkingDay

Это то, что вы хотите:

(CASE WHEN CT.dayofweek = 1 THEN 0
      WHEN CT.dayofweek = 7 THEN 0
      WHEN CT.dt = PH.`Holiday Date` THEN 0
      ELSE 1
END) AS IsWorkingDay

Есть два важных различия:

  • END CASEнедопустимый синтаксис.
  • Когда вы используете обратные пометки, вы говорите, что строка является идентификатором - обычно это ссылка на столбец.Нет столбцов с именем 0 или 1.

Две другие проблемы с вашим запросом - это отсутствие запятой и отсутствие условий join.Ваше предложение from должно выглядеть так:

from calendar_table ct left join
     Public_Holidays ph
     on ct.dt = ph.dt    -- or whatever the right condition is
...