使用CTE SQL Server 2019时的情况

iszxjhcz  于 2022-11-21  发布在  SQL Server
关注(0)|答案(1)|浏览(188)

我有一个查询,它必须返回一个值。
我的查询返回2行。但我必须设置条件:如果我的列是[STJH_DATE_ACTION] <= GETDATE(),我必须只显示第一行
如果我的列[STJH_DATE_ACTION] < GETDATE()我想显示第二行。
我尝试了以下查询:

WITH CTE AS 
(
    SELECT 
        ROW_NUMBER () OVER (PARTITION BY ST_ID, STJ_JOUR ORDER BY A.STJH_DATE_ACTION DESC) AS RN, 
        * 
    FROM 
        bloc.W_TMD_JOUR_HISTORIQUE A
)
SELECT *
FROM CTE
WHERE CTE.ST_ID = 268 AND CTE.STJ_JOUR = 1

如何添加Case When表达式?
我有这个结果

7cjasjjr

7cjasjjr1#

我更愿意有一个最低限度的可重复的示例代码来使用。我盲目地去你的代码示例以上,你的描述。我添加了一个CASE表达式到您的CTE。然后在主要的SELECT,我按CASE表达式排序,并添加TOP 1,以确保我们只得到一行。我不完全了解天气,调用GETDATE()两次总是会产生与我使用它相同的结果。

WITH CTE AS (
    SELECT 
        ROW_NUMBER () over (partition by ST_ID, STJ_JOUR order by A.STJH_DATE_ACTION DESC) as RN
        , * 
        , CASE 
            WHEN [STJH_DATE_ACTION] = GETDATE() THEN 1
            WHEN [STJH_DATE_ACTION] < GETDATE() THEN 0
          END as isCurrent
    FROM bloc.W_TMD_JOUR_HISTORIQUE A
)
SELECT TOP 1
    CTE.*
FROM CTE
WHERE 
    CTE.ST_ID = 268 
    AND CTE.STJ_JOUR = 1
ORDER BY CTE.isCurrent DESC

更新:CASE“表达式”不是语句。

相关问题