可以在select语句中的查询中使用数学运算符吗?

时间:2018-02-18 08:02:53

标签: sql database ms-access case

我正在尝试INNER JOIN两个表:tbl_profiletbl_employment

tbl_profile有:

    id_no (pk)
    lastName (String)
    firstName (String)

tbl_employment有:

    company_no (pk)
    id_no (fk)
    datehired (date)
    company (string)
    end_employment (date)

profile表中的每个人在生活中可以有很多工作或根本没有工作。但我需要找到该人的最新date_hired

这些是我想要设定的条件:

  • 如果此人的date_hired不为空并且end_employment为空,则表示该人员当前正在使用
  • 如果该人的date_hired不为空并且end_employment也不为空,则表示此人当前失业
  • 如果该人的date_hired为空,则表示该 这个人没有成功。

在确定上述条件后,我的查询将添加另一个名为STATUS的列,该列仅根据上述条件说明EMPLOYEDUNEMPLOYED

但是,当我将此逻辑转换为查询时,它会声明

  

语法错误:缺少运算符。

我读了一本关于使用when - then语句的书,例如if - else在查询的SELECT中可以做到。但是根据我的查询,它不起作用。这有什么问题?

SELECT p.id_no, p.lastName ,
(CASE
    WHEN c.date_hired != "" AND c.end_employment = "" THEN 'employed'
    WHEN c.date_hired != "" AND c.end_employment != "" THEN 'unemployed'
    WHEN c.date_hired = "" THEN 'unemployed'
END)
AS employment_status
FROM tbl_profile AS p INNER JOIN tbl_employment AS c ON p.id_no= c.id_no;

它说错误在这部分内:

(CASE
       WHEN c.date_hired != "" AND c.end_employment = "" THEN 'employed'
       WHEN c.date_hired != "" AND c.end_employment != "" THEN 'unemployed'
       WHEN c.date_hired = "" THEN 'unemployed'    END)

P.S:我在MS Access中进行了查询

1 个答案:

答案 0 :(得分:1)

错误来自!=,它不是MS Access中的有效比较运算符。有<>,但虽然这有效但它不是你需要的:

您正在将日期与空字符串进行比较,这有点奇怪。我想您的日期存储在具有适当日期数据类型的列中。您应该检查值是否为null

此外,您的查询将找不到tbl_employment中没有任何记录的人。你需要一个外部联接。

最后,您的查询不会阻止您为同一个人获取多个结果:您需要对结果进行分组。我建议MIN,以便同时获得employedunemployedemployed的情况将是总体结论。

未经测试(我没有MS Access):

SELECT     p.id_no,
           p.lastName, 
           MIN(IIF(c.date_hired IS NOT NULL AND c.end_employment IS NULL,
                   'employed',
                   'unemployed'
           )) AS employment_status
FROM       tbl_profile AS p 
LEFT JOIN  tbl_employment AS c 
        ON p.id_no = c.id_no
GROUP BY   p.id_no,
           p.lastName;

另请注意CASE WHEN表达式更改为IIFMS Access does not support the former

此外,只有一个条件是“雇用”结果:所有其他条件都表示失业,因此不需要单独核实。