我的查询的
CASE
部分中有一个 SELECT
语句,它提供了 ISTARIFFLOCK
列。现在我想根据情况介绍一个新专栏ISEDITABLE
:
ISTARRIFLOCK = True
并且如果上面一行有较旧的 ENDDATE
,则 ISEDITABLE = False
。我有几个问题:
列
ISTARIFFLOCK
未被识别为创建 CASE
语句的有效列。
我似乎找不到一种方法来检查上面的所有行
有谁可以帮我解决这个问题吗?
CASE
WHEN (MAX(CGCP.ENDDATE) = CPT.ENDDATE)
THEN 'True'
ELSE 'False'
END AS ISTARIFFLOCK,
CASE
WHEN ISTARIFFLOCK = TRUE
--AND CPT.ENDATE OF one OF the rows above < the CPT.ENDATE OF CURRENT row
THEN 'False'
ELSE 'True'
END AS ISEDITABLE
我尝试用生成布尔值的语句替换
IFTARIFFLOCK
(MAX(CGCP.ENDDATE) = CPT.ENDDATE)
但它似乎阻止我使用例如
OVER()
功能。
我还尝试了
LAG()
函数,但这似乎查看上面的特定行而不是所有行。
假设“上面的行”表示表中已存在的所有行,您可以使用如下所示的内容来代替注释行:
AND EXISTS (SELECT TOP 1 1 FROM yourTable cptInner where cptInner.EndDate < cpt.EndDate)