SQL SELECT语句

时间:2010-12-21 13:44:01

标签: sql oracle

我的表看起来像这样 -

EFF_DATE    ID         Col_A  Col_B Col_C
01/01/1900  1122334    N      N     N
12/01/2010  1122334    NULL   Y     Y
12/02/2010  1122334    Y      NULL  NULL
12/21/2010  1122334    NULL   NULL  NULL
01/01/1900  44555222   N      N     N
12/02/2010  44555222   NULL   NULL  NULL
01/01/1900  897969595  N      N     N
11/22/2010  897969595  Y      NULL  NULL
01/01/1900  897969596  N      N     N
11/22/2010  897969596  Y      NULL  NULL

现在,我需要为每条记录填充所有列,以便如果日期Col_A为NULL,则应该为前一个eff_date中的相同Id填充Col_A的值。

这是我想要的解决方案 -

EFF_DATE    ID  Col_A   Col_B   Col_C
01/01/1900  01122334    N   N   N
12/01/2010  01122334    N   Y   Y
12/02/2010  01122334    Y   Y   Y
12/21/2010  01122334    Y   Y   Y
01/01/1900  044555222   N   N   N
12/02/2010  044555222   N   N   N
01/01/1900  897969595   N   N   N
11/22/2010  897969595   Y   N   N
01/01/1900  897969596   N   N   N
11/22/2010  897969596   Y   N   N

请帮忙! 我想使用简单的SELECT语句来实现这个结果。

1 个答案:

答案 0 :(得分:-1)

在mysql中

UPDATE tbL_table 
JOIN (SELECT EFF_DATE, COl_A, @x:=@x+1 AS rnum FROM tbl_table) a ON a.EFF_DATE=tbl_table.EFF_DATE
JOIN (SELECT EFF_DATE, COl_A, @y:=@y+1 AS rnum FROM tbl_table) b ON b.rnum+1=a.rnum 
JOIN (SELECT @x:=0, @y:=0) as vars on true 
SET Col_A=IF(Col_A IS NULL, b.Col_A , Col_A)

你需要以某种方式通过eff_date订购,但这就是我将如何做的基本想法。