найти разницу между 2 рядами - PullRequest
0 голосов
/ 05 декабря 2018

Мне нужно найти разницу между строками c2 в приведенной ниже таблице

SEQ_ID  Priv_ID Common_ID Source_ID C1  C2
------ -------- --------- --------- -- ---
1          1    C001        S1  abc 32331299300
2          1    C001        S1  def 12656678121
3          1    C001        S1  ghi 8966492700
4          1    C001        S2  abc 32331292233
5          1    C001        S2  ghi 8966492700
6          1    C001        S2  def 12656672000

Ожидаемый результат должен быть таким, как показано ниже,

SEQ_ID  Priv_ID Common_ID   C1  C2
------ -------- ---------   -- ---
1          1    C001        abc 7067
2          1    C001        def 6121
3          1    C001        ghi 0

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Как насчет этого?Я не использовал одинаковые столбцы для всех строк (поэтому они не имеют никакого значения).

SQL> with test (seq_id, source_id, c1, c2) as
  2    (select 1, 's1', 'abc', 32331299300 from dual union all
  3     select 2, 's1', 'def', 12656678121 from dual union all
  4     select 3, 's1', 'ghi', 8966492700  from dual union all
  5     select 4, 's2', 'abc', 32331292233 from dual union all
  6     select 5, 's2', 'ghi', 8966492700  from dual union all
  7     select 6, 's2', 'def', 12656672000 from dual
  8    )
  9  select min(seq_id) seq_id,
 10    c1,
 11    max(case when source_id = 's1' then  c2 end) +
 12    max(case when source_id = 's2' then -c2 end) c2
 13  from test
 14  group by c1
 15  order by 1;

    SEQ_ID C1          C2
---------- --- ----------
         1 abc       7067
         2 def       6121
         3 ghi          0

SQL>
0 голосов
/ 05 декабря 2018

Хммм.,,Одним из методов будет условная агрегация.Но ключ row_number():

select Priv_ID, Common_ID, c1,
       max(case when source_ID = 'S1' then c2
                when source_ID = 'S2' then -c2
           end) as diff
from (select t.*,
             row_number() over (partition by Priv_ID, Common_ID, c1 order by seq_id) as seqnum
      from t
     ) t
group by Priv_ID, Common_ID, c1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...