powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
7 сообщений из 7, страница 1 из 1
как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
    #37463181
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Вопрос в следующем:

Есть таблица
Код: plaintext
1.
2.
3.
4.
CREATE TABLE TABLE1 (
ID INTEGER,
NUM INTEGER,
NUM_VAL INTEGER,
OP_DATE DATE);

В ней содержатся данные:


1, 125, 2, 01.01.2011
2, 123, 0, 02.01.2011
3, 124, 0, 02.01.2011
4, 0, 3, 02.01.2011
5, 126, 0, 02.01.2011
6, 125, 0, 03.01.2011

нужно написать запрос, который вернет данные в таком виде:

1, 125, 2, 01.01.2011
2, 123, 2, 02.01.2011
3, 124, 2, 02.01.2011
4, 124, 3, 02.01.2011
5, 126, 3, 02.01.2011
6, 125, 3, 03.01.2011

Подскажите, как это можно сделать?
...
Рейтинг: 0 / 0
как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
    #37463377
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Гужанов,

Здравствуйте.

Если версия 9.5, то
Код: plaintext
1.
2.
3.
4.
5.
select 
  id
, last_value(nullif(num,  0 ), 'IGNORE NULLS') over(order by id) num
, last_value(nullif(num_val,  0 ), 'IGNORE NULLS') over(order by id) num_val
from table1
...
Рейтинг: 0 / 0
как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
    #37463429
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если меньше 9.5, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
  id
, num_val
, max(num) over (partition by
  sum(case num when  0  then  0  else  1  end) over (order by id)
  ) num
, max(num_val) over (partition by
  sum(case num_val when  0  then  0  else  1  end) over (order by id)
  ) num_val
from table1
...
Рейтинг: 0 / 0
как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
    #37464101
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое.

Но я неправильно указал требуемый результат. Нужно вот так:

Начальная таблица -

1, 125, 2, 01.01.2011
2, 123, 0, 02.01.2011
3, 124, 0, 02.01.2011
4, 0, 3, 02.01.2011
5, 126, 0, 02.01.2011
6, 125, 0, 03.01.2011

а результат нужен вот такой:

1, 125, 2, 01.01.2011
2, 248, 2, 02.01.2011
3, 372, 2, 02.01.2011
4, 372, 5, 02.01.2011
5, 498, 5, 02.01.2011
6, 623, 5, 03.01.2011,

т.е. значения по полям NUM и NUM_VAL должны суммироваться с предыдущими значениями. При сортировке по ID и OP_DATE.

Извиняюсь за неправильно сформулированный вопрос.
...
Рейтинг: 0 / 0
как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
    #37464102
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия DB2 - 9.7
...
Рейтинг: 0 / 0
как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
    #37464963
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Гужанов,

Это называется "нарастающий итог":
Код: plaintext
1.
2.
3.
4.
select id
, sum(num) over(order by id, op_date) num
, sum(num_val) over(order by id, op_date) num_val
, op_date
from table1
...
Рейтинг: 0 / 0
как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
    #37467602
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо огромное!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / как заполнить нулевые значения в наборе данных предыдущим ненулевым значением?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]