Sql 找出两行之间的差异

Sql 找出两行之间的差异,sql,oracle,Sql,Oracle,我需要找出下表中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

我需要找出下表中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

请帮忙。

嗯。一种方法是条件聚合。但关键是行数:


这个怎么样?我没有对所有行使用相同的列,因此它们没有任何区别

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>

请粘贴一些您尝试过的代码,并描述哪些代码不起作用。这一个工作非常好。非常感谢您的快速帮助。此代码也运行良好。准确如预期。谢谢各位:-
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>