2013-10-25 4 views
0

Мне нужно перенести значения из предыдущей строки, пока не достигнет другого нового значения. LAG не работает, потому что он заполняет только 1 строку, и я могу иметь от 1 до 12 строк в зависимости от номера заказа.Заполните пустые строки между значениями

ColumnA - номер моей строки, columnB - это столбец, который мне нужно заполнить, пока он не попадет на следующий небук. Любая помощь очень ценится, потому что у меня нет идей.

Row будет как этого

Columna Columb ColumnC ColumnD 
12  Yarn Yellow Coarse 
13    Yellow Coarse 
14  Needles Size G Steel 
15    Size H Wood 
16    Size Y Wood 
17  Hooks Fish  Steel 
18    Whale Steel 
18    Dolphin Steel 
19    Mermaid Steel 

ответ

0

Учитывая поле А представляет собой непрерывную последовательность ..

Table 
A  B  C  D 
12  Yarn  Yellow Coarse 
13    Yellow Coarse 
14  Needles Size G Steel 
15    Size H Wood 
16    Size Y Wood 
17  Hooks Fish  Steel 
18    Whale Steel 
19    Dolphin Steel 
20    Mermaid Steel 

Моего первого проход на него

Select 
    T1.A 
    COALESCE(T2.A,T1.B) as B, 
    T1.C, 
    T1.D 

From 
    Table as T1 
    LEFT JOIN Table as T2 ON T2.A = T1.A -1 

нового ответ

Select 
    T1.A 
    Coalesce(
     T1.B, 
     (
      Select top 1 B 
      FROM Table 
      WHERE A < T1.A 
      and B IS Not Null 
      ORDER BY A DESC 
     ) 
    ) as B, 
    T1.C, 
    T1.D 
FROM  
    Table as T1 
+0

Глядя на это снова, я дал неверный ответ. Я подумаю об этом. – NoMoCouch

+0

Выберите T1.a коалесценции ( \t T1.b, \t (Выбрать B \t из Таблицы где А = T1.a и В не равно нулю \t) ) как В, T1.C, T1.D От Таблица как T1 – NoMoCouch

Смежные вопросы