如果为null,则使用上一行的值更新行

时间:2012-04-29 12:39:01

标签: sql database sybase

我正在使用Sybase 15。
我有一张看起来像这样的桌子

--------------------------------------------
 Date       |  GroupId  |  Comment
--------------------------------------------
01/05/2012     1              ABC
01/05/2012     2              XYZ
02/05/2012     1              null
02/05/2012     2              null
03/05/2012     1              null
03/05/2012     2              null
04/05/2012     1              DEF
04/05/2012     2              GHI
05/05/2012     1              null
05/05/2012     2              null
06/05/2012     1              null

我正在寻找的输出如下。 如果注释字段为空/ null,请使用前一天的值(具有相同的GroupId)更新它

-----------------------------------------------
 Date            |  GroupId  |   Comment
-----------------------------------------------
01/05/2012           1              ABC
01/05/2012           2              XYZ
02/05/2012           1              ABC
02/05/2012           2              XYZ
03/05/2012           1              ABC
03/05/2012           2              XYZ
04/05/2012           1              DEF
04/05/2012           2              GHI
05/05/2012           1              DEF
05/05/2012           2              GHI
06/05/2012           1              DEF

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题,我认为Sybase不支持lag()outer apply。您可以在子查询中查找所有早期的注释,然后使用non exists子句要求中间没有注释。那应该找到之前的评论。

select  Date
,       GroupId
,       case
        when Comment is not null then Comment
        else
        (
        select  Comment
        from    YourTable yt2
        where   yt1.GroupId = yt2.GroupId
                and yt2.Comment is not null
                and yt2.Date < yt1.Date
                and not exists
                (
                select  *
                from    YourTable yt3
                where   yt1.GroupId = yt2.GroupId
                        and yt2.Comment is not null
                        and yt3.Date < yt2.Date and yt2.Date < yt1.Date
                )
        ) end as Comment
from    YourTable yt1