当给定列值为零时,如何使用上面行中的值?

Jak*_*ake 3 sql sql-server common-table-expression sql-server-2008 case-when

我有一个按日期排列的项目表(每一行都是一个新日期)。我正在从另一列 D 中提取一个值。不过我需要它来替换 0。我需要以下逻辑:当该日期的 D=0 时,使用前一天 D 列中的值。

实际上,说实话,我需要说的是,当 D 为 0 时,使用 D 不为 0 的最新日期的值,但第一个将让我大部分顺利完成。

有没有办法建立这个逻辑?也许是 CTE?

非常感谢。

PS 我正在使用 SSMS 2008。

编辑:一开始我不太清楚。我要更改的值不是日期。我想根据日期将 D 中的值更改为 D 中最新的非零值。

小智 5

也许以下查询可能对您有所帮助。它使用OUTER APPLY来获取结果。屏幕截图 # 1显示示例数据和针对示例数据的查询输出。这个查询可以写得更好,但这就是我现在能想到的。

希望有帮助。

SELECT      ITM.Id
        ,   COALESCE(DAT.New_D, ITM.D) AS D
        ,   ITM.DateValue
FROM        dbo.Items   ITM
OUTER APPLY (
                SELECT      
                TOP 1       D   AS New_D
                FROM        dbo.Items DAT
                WHERE       DAT.DateValue   < ITM.DateValue
                AND         DAT.D           <> 0
                AND         ITM.D           = 0
                ORDER BY    DAT.DateValue DESC
            ) DAT
Run Code Online (Sandbox Code Playgroud)

屏幕截图#1:

1