1
的Oracle 10gPL/SQL - 提取文本,並結合如果重複
我的要求是:
- 選擇每個部門
- 選擇每個部門的各個項目(每個項目獲得的其自己的行,但如果重複則合併)
- 選擇每個不同部門和項目的每種顏色(如果重複,請選擇最小編號)
- 選擇每個不同部門的每個用戶AND item(aggregate if多)
DB數據
Department Item_List Color User
Research Item 1 1. Blue John
Research Item 1;Item 2 2. Blue Mike
Research Item 1;Item 2; Item 3 1. Red Steve
Research Item 2 1. Purple John
Research Item 1;Item 4 2. Red Bill
Ops Item 1;Item 2 3. Silver John
Ops Item 1;Item 3 3. Silver Mike
Ops Item 4 4. Yellow Mark
預期結果
Department Item_List Color User
Research Item 1 1. Blue John, Mike
Research Item 2 1. Blue Mike
Research Item 1 1. Red Steve, Bill
Research Item 2 1. Red Steve
Research Item 3 1. Red Steve
Research Item 2 1. Purple John
Research Item 4 1. Red Bill
Ops Item 1 3. Silver John, Mike
Ops Item 2 3. Silver John
Ops Item 3 3 Silver Mike
Ops Item 4 4. Yellow Mark
我使用下面的SQL,但它不工作:
with data as
(
select
DEPARTMENT,
ITEM_LIST,
(length(ITEM_LIST)-length(replace(ITEM_LIST,';','')))+1 cnt,
MIN(Color) as Color,
wm_concat(USER) as USER
from DataBase_Table
Group by
DEPARTMENT,
ITEM_LIST
)
select
DEPARTMENT
ITEM_LIST,
Color,
User
from
(
select distinct
DEPARTMENT,
ltrim(regexp_substr(ITEM_LIST,'[^;]+',1,level)) ITEM_LIST,
Color,
level,
User
from data
connect by level <= cnt
order by DEPARTMENT
)
;