簡體   English   中英

在Oracle SQL中反匯編字符串,分組和重建

[英]Disassemble string, group, and reconstruct in Oracle SQL

因此,這是我的數據示例:

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不再存在了,因為ID的總和不等於零。

解決這個問題的任何幫助將不勝感激!

這是在使用leftlocateid字段的開始部分分組之后,將表重新連接到其自身的一個選項:

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     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM