我想向一个视图添加两个新字段,该视图与带有case语句的表无关

ru9i0ody  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(370)

1) 我正在创建一个日历视图,我想添加一列,检查该行中的日期是否为工作日,如果是,则填充1,否则填充0。
我有一个包含所有英国公共假日的表,在日历表中我还有一个“dayofweek”字段,其中1和7是sun和sat。
当前我正在尝试使用case语句,但是我无法运行脚本,因为我收到以下错误:
sql错误(1064):您的sql语法有错误;如果ct.dayofweek=1或ct.dayofweek=7或ct.dt=ph.`h'在第12行(已编辑),请检查与mysql server版本对应的手册,以获得正确的语法使用情况。这是我的脚本:

  1. ALTER VIEW Calendar_View AS
  2. select `calendar_table`.`dt` AS `date`,
  3. `calendar_table`.`year` AS `year`,
  4. `calendar_table`.`quarter` AS `quarter`,
  5. `calendar_table`.`month` AS `month`,
  6. `calendar_table`.`day` AS `day`,
  7. `calendar_table`.`dayofweek` AS `dayofweek`,
  8. `calendar_table`.`monthName` AS `monthName`,
  9. `calendar_table`.`dayName` AS `dayName`,
  10. `calendar_viewtable`.`week` AS `week`,
  11. `calendar_table`.`isWeekday` AS `isWeekday`
  12. (CASE
  13. WHEN CT.dayofweek = `1` THEN `0'
  14. WHEN CT.dayofweek = `7` THEN `0`
  15. WHEN CT.dt = PH.`Holiday Date` THEN `0`
  16. ELSE `1`
  17. END CASE ) AS IsWorkingDay
  18. from `calendar_table` CT, `Public_Holidays` PH

2) 我还想添加另一个字段,检查日历中的日期是否是当前日期,因此用yes,else no填充新字段(我尝试使用case语句,但这不起作用)。

sq1bmfud

sq1bmfud1#

这是您的代码:

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

这就是你想要的:

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

有两个重要的区别: END CASE 无效语法。
当您使用backticks时,您的意思是字符串是一个标识符——通常是一个列引用。没有名为 0 或者 1 .
查询中的另外两个问题是缺少逗号和缺少 join 条件。你的 from 子句应该更像:

  1. from calendar_table ct left join
  2. Public_Holidays ph
  3. on ct.dt = ph.dt -- or whatever the right condition is
展开查看全部

相关问题