根据序列号插入数据

时间:2019-01-23 23:49:16

标签: sql-server tsql

我在表中有以下数据:

Index   Domain  Name
-------------------------
1       AAA     Aaron.B
NULL    NULL    NULL
1       AAA     Aaron.B2
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
2       AAA2    Aaron.D
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL

我要实现的目标如下:

Index   Domain  Name
------------------------------
1      AAA      Aaron.B
1      AAA      Aaron.B
1      AAA      Aaron.B2
1      AAA      Aaron.B2
1      AAA      Aaron.B2
1      AAA      Aaron.B2
1      AAA      Aaron.B2
1      AAA      Aaron.B2
1      AAA      Aaron.B2
2      AAA2     Aaron.D
2      AAA2     Aaron.D
2      AAA2     Aaron.D
2      AAA2     Aaron.D

我们将不胜感激。

关于, 约翰

1 个答案:

答案 0 :(得分:0)

类似的事情会做:

declare @t table ([index] int, domain nvarchar(max), [name] nvarchar(max))

insert @t values
    (1   ,    'AAA' ,    'Aaron.B'  ),
    (NULL,    NULL,    NULL     ),
    (1   ,    'AAA' ,    'Aaron.B2' ),
    (NULL,    NULL,    NULL     ),
    (NULL,    NULL,    NULL     ),
    (NULL,    NULL,    NULL     ),
    (NULL,    NULL,    NULL     ),
    (NULL,    NULL,    NULL     ),
    (NULL,    NULL,    NULL     ),
    (2   ,    'AAA2',    'Aaron.D'  ),
    (NULL,    NULL,    NULL     ),
    (NULL,    NULL,    NULL     ),
    (NULL,    NULL,    NULL     )


; with t as
(
    select *, ROW_NUMBER() over (order by (select null)) rn
    from @t t1
)
select isnull(x.[index], t.[index])
    , isnull(x.domain, t.domain)
    , isnull(x.[name], t.[name])
from
(
    select *
        ,  (select max(t2.rn) from t t2 where t2.[index] is not null and t1.rn > t2.rn) rn2
    from t t1
)x
left join t on x.rn2 = t.rn

结果:

----------- ------------ -------------
1           AAA          Aaron.B
1           AAA          Aaron.B
1           AAA          Aaron.B2
1           AAA          Aaron.B2
1           AAA          Aaron.B2
1           AAA          Aaron.B2
1           AAA          Aaron.B2
1           AAA          Aaron.B2
1           AAA          Aaron.B2
2           AAA2         Aaron.D
2           AAA2         Aaron.D
2           AAA2         Aaron.D
2           AAA2         Aaron.D