TSQL - Самостоятельная ссылка - PullRequest
2 голосов
/ 30 марта 2012

У меня есть 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

Ответы [ 2 ]

3 голосов
/ 30 марта 2012
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
1 голос
/ 30 марта 2012
;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
...