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

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

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版本对应的手册,以获得正确的语法使用情况。这是我的脚本:

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

sq1bmfud

sq1bmfud1#

这是您的代码:

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

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

相关问题