tsql-自参考

tsql-自参考,tsql,common-table-expression,Tsql,Common Table Expression,我有一个CTE返回以下记录。我应该如何继续执行新的查询,以便GID=NULL的所有记录都将获得上一个GID ID GID VALUE 1 1 Some Value 2 NULL Some Value 3 2 Some Value 4 3 Some Value 5 NULL Some Value 6 NULL Some Value ID为5和6的记录将具有GID=3这一点不明显,但我现在看到了。你或许应该投你

我有一个CTE返回以下记录。我应该如何继续执行新的查询,以便GID=NULL的所有记录都将获得上一个GID

ID  GID     VALUE
1   1       Some Value
2   NULL    Some Value
3   2       Some Value
4   3       Some Value
5   NULL    Some Value
6   NULL    Some Value

ID为5和6的记录将具有GID=3

这一点不明显,但我现在看到了。你或许应该投你自己一票这一点都不明显,但我现在看到了。你或许应该投你自己一票
with C(ID, GID, VALUE) as
(
  select 1,   1,       'Some Value' union all
  select 2,   NULL,    'Some Value' union all
  select 3,   2,       'Some Value' union all
  select 4,   3,       'Some Value' union all
  select 5,   NULL,    'Some Value' union all
  select 6,   NULL,    'Some Value'
)

select C1.ID, 
       C3.GID,
       C1.VALUE
from C as C1
  cross apply
    (select top 1 C2.ID, C2.GID
     from C as C2
     where C2.ID <= C1.ID and
           C2.GID is not null
     order by C2.ID desc) as C3
;WITH C(ID, GID, VALUE) as
(
  select 1,   1,       'Some Value' union all
  select 2,   NULL,    'Some Value' union all
  select 3,   2,       'Some Value' union all
  select 4,   3,       'Some Value' union all
  select 5,   NULL,    'Some Value' union all
  select 6,   NULL,    'Some Value'
)
select c.id, d.GID, c.value from c 
cross apply 
(select max(GID) GID from c d where c.id >= id) d