我正在处理一个查询,该查询会提取访问某个位置的人员的列表。该位置的部分政策是,如果某人在3年内没有来过,那么他们将不再是活跃成员,而必须重新建立其成员身份。通常,我只是将查询结果粘贴到Excel中,并添加一个带有公式的列,该公式可以查看上次访问日期并标记此人是否活跃,但是我想我可以尝试将计算结果直接添加到查询中并使用SQL服务器为我完成工作。问题是,我不确定语法。
我希望最终结果看起来像这样(通常,我的Excel公式距创建报告的日期只有3年了,因此,对于本示例而言,我们将查找3从2019年12月17日算起):
PersonID LastVisit Active
-------------------------------------
1001 2019-12-01 YES
1002 2014-07-24
1003 2016-12-31 YES
1004 2018-10-12 YES
1005 2016-02-04
1006 2017-09-20 YES
如果到目前为止我已经尝试做的一些研究对我的理解是正确的,则需要使用CASE
声明。
SELECT
PersonID,
LastVisit,
CASE [--not sure what, if anything, goes here--]
WHEN LastVisit > DATEADD(yy,-3,GETDATE()) THEN 'YES'
END AS Active
FROM PersonInfo
ORDER BY PersonID
就目前而言,我遇到了两个语法错误:incorrect syntax near '>'
和incorrect syntax near 'THEN'
。我至少在正确的轨道上吗?我需要做些什么才能使这种逻辑起作用?
答案 0 :(得分:4)
此语法应该起作用:
(CASE WHEN LastVisit > DATEADD(year, -3, GETDATE()) THEN 'YES'
END) AS Active
顺便说一下,这在SQL中称为case
表达式。
答案 1 :(得分:2)
我在您的代码中看到的唯一实际问题是方括号。您可以在case语句中的第一个方括号之后开始注释。如果您删除了不必要的内容或提早开始评论,那么它应该可以工作。
完全删除评论:
SELECT
PersonID,
LastVisit,
CASE
WHEN LastVisit > DATEADD(yy,-3,GETDATE()) THEN 'YES'
END AS Active
FROM PersonInfo
ORDER BY PersonID
或者只是更早地发表评论
SELECT
PersonID,
LastVisit,
CASE --[not sure what, if anything, goes here--]
WHEN LastVisit > DATEADD(yy,-3,GETDATE()) THEN 'YES'
END AS Active
FROM PersonInfo
ORDER BY PersonID