在Oracle SQL中反汇编字符串,组和重构

时间:2015-11-25 23:27:38

标签: sql oracle

以下是我的数据示例:

ID     | Amount
1111-1 |  5  
1111-1 | -5
1111-2 |  5
1111-2 | -5
12R-1  |  8
12R-1  | -8
12R-3  |  8
12R-3  | -8
54A73-1|  2
54A73-1| -2
54A73-2|  2
54A73-2| -1

我想要做的是按破折号前面的ID列中的字符串进行分组,找到总和为零的ID组。踢球者是在我找到哪一组ID总和为零之后,我想在短划线之后添加短划线和数字。

以下是我希望解决方案的样子:

ID     | Amount
1111-1 |  5  
1111-1 | -5
1111-2 |  5
1111-2 | -5
12R-1  |  8
12R-1  | -8
12R-3  |  8
12R-3  | -8

请注意以54A73开头的ID不再存在,因为它们的金额总和不等于零。

非常感谢任何解决这些问题的帮助!

1 个答案:

答案 0 :(得分:1)

使用idleftlocate字段的开头部分进行分组后,将表格连接回自身的一个选项:

MySQL版本

select id, amount
from yourtable t 
   join (
    select left(id, locate('-', id)-1) shortid
    from yourtable
    group by left(id, locate('-', id)-1)
    having sum(amount) = 0
     ) t2 on left(t.id, locate('-', t.id)-1) = t2.shortid     

Oracle版本

select id, amount
from yourtable t 
   join (
    select substr(id, 0, instr(id,'-')-1) shortid
    from yourtable
    group by substr(id, 0, instr(id,'-')-1) 
    having sum(amount) = 0
     ) t2 on substr(t.id, 0, instr(t.id,'-')-1) = t2.shortid