Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Разница значений в строках по условию  [new]
ASVG
Guest
Доброй ночи, уважаемые участники форума!

Помогите решить задачку, так как перебрал, кажется, почти все варианты, но решения так и не нашел. Имеется следующая структура данных. Итоговые строки (где V2, V3 = null) получены с помощью оконной аналитической функции. RW - столбец для сортировки значений, чтобы итоговые строки находились под группами, которые они подытоживают.

Задача в следующем:

Вывести в дополнительном столбце (только в строке итогов) разницу между текущим и предыдущим значением (по столбцу V5). Для второй строки итогов это будет 52.7 - 80.15, для первой либо null либо можно получить 0 (80.15 - 80.15). Не итоговые строки должны быть null.

Картинка с другого сайта.

"Живой" пример выложил здесь: http://www.sqlfiddle.com/#!4/197a0c/1/0

Буду благодарен как за реальную помощь в изменении запроса, так и за любые соображения по этому поводу.
6 окт 17, 22:32    [20849831]     Ответить | Цитировать Сообщить модератору
 Re: Разница значений в строках по условию  [new]
xtender
Member

Откуда: Мск
Сообщений: 4503
ASVG,

вам надо просто GROUPING_sets и lag()
6 окт 17, 22:48    [20849901]     Ответить | Цитировать Сообщить модератору
 Re: Разница значений в строках по условию  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 332
ASVG

Вывести в дополнительном столбце (только в строке итогов) разницу между текущим и предыдущим значением (по столбцу V5). Для второй строки итогов это будет 52.7 - 80.15, для первой либо null либо можно получить 0 (80.15 - 80.15). Не итоговые строки должны быть null.


А для 3-й какой результат планируется?
например по итогу:
V1       V4     V5
3   -- Итого  100
9 окт 17, 11:31    [20853884]     Ответить | Цитировать Сообщить модератору
 Re: Разница значений в строках по условию  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 355
ASVG,
SQL> select * from data_src order by 1,2,3,4;

 DATA_TYPE DATA_SUB_TYPE P_TXT  M_TXT        VOL       ASVI        L_M
---------- ------------- ------ ----- ---------- ---------- ----------
         1             0 p_1    m_1        12,05         10         12
         1             0 p_1    m_1        17,25         13          9
         1             0 p_1    m_2        17,25         13          9
         1             1 p_1    m_1        12,05         10         12
         1             1 p_2    m_1        10,25         13          9
         1             1 p_2    m_2         11,3         13          9
         2             0 p_1    m_1        12,15         10         12
         2             0 p_1    m_2         18,3         15          8
         2             1 p_1    m_2        22,25         20         11
         3             1 p_1    m_2        22,25         20         11

10 rows selected.

SQL> with t as (
  2  select
  3   data_type as v1,
  4   data_sub_type as v2,
  5   p_txt as v3,
  6   m_txt as v4,
  7   sum(vol) as v5,
  8   sum(asvi) as v6,
  9   avg(l_m) as v7,
 10   grouping(data_sub_type) gr
 11  from data_src
 12  group by grouping sets ((data_type, data_sub_type, p_txt, m_txt),(data_type))
 13  )
 14  select t.*
 15  ,decode(gr,1,lag(v5) over (partition by gr order by v1))-v5 v_sub
 16  from t
 17  order by 1,2,3,4
 18  /

        V1         V2 V3    V4            V5         V6         V7         GR      V_SUB
---------- ---------- ----- ----- ---------- ---------- ---------- ---------- ----------
         1          0 p_1   m_1         29,3         23       10,5          0
         1          0 p_1   m_2        17,25         13          9          0
         1          1 p_1   m_1        12,05         10         12          0
         1          1 p_2   m_1        10,25         13          9          0
         1          1 p_2   m_2         11,3         13          9          0
         1                             80,15         72         10          1
         2          0 p_1   m_1        12,15         10         12          0
         2          0 p_1   m_2         18,3         15          8          0
         2          1 p_1   m_2        22,25         20         11          0
         2                              52,7         45 10,3333333          1      27,45
         3          1 p_1   m_2        22,25         20         11          0
         3                             22,25         20         11          1      30,45

12 rows selected.

SQL>


....
stax
9 окт 17, 15:48    [20855002]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить