[英]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的總和不等於零。
解決這個問題的任何幫助將不勝感激!
這是在使用left
和locate
將id
字段的開始部分分組之后,將表重新連接到其自身的一個選項:
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.