如果别名列具有特定值,如何检查上面的所有行

问题描述 投票:0回答:1

我的查询的

CASE
部分中有一个
SELECT
语句,它提供了
ISTARIFFLOCK
列。现在我想根据情况介绍一个新专栏
ISEDITABLE

  • 如果
    ISTARRIFLOCK = True
    并且如果上面一行有较旧的
    ENDDATE
    ,则
    ISEDITABLE = False

我有几个问题:

  • ISTARIFFLOCK
    未被识别为创建
    CASE
    语句的有效列。

  • 我似乎找不到一种方法来检查上面的所有行

有谁可以帮我解决这个问题吗?

SQL image of my table

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()
函数,但这似乎查看上面的特定行而不是所有行。

sql case alias
1个回答
0
投票

假设“上面的行”表示表中已存在的所有行,您可以使用如下所示的内容来代替注释行:

AND EXISTS (SELECT TOP 1 1 FROM yourTable cptInner where cptInner.EndDate < cpt.EndDate)
© www.soinside.com 2019 - 2024. All rights reserved.