2016-07-20 61 views
0

刪除重複我有一個值列像如何分析和彙總,從文本字段

select chipset_name from chipset 

    chipset_name 
    "Chip A,Chip B" 
    "Chip A" 
    "Chip F" 
    "DSOG K" 
    "FROW 01 33" 
    "Chip F,DSOG K" 
    ... 

我想它聚合到一個行沒有重複的,但如果我用string_agg(不同的..)我有重複

select string_agg(distinct chipset_labels,',')from chipset 
---------- 
Chip A,Chip B,**Chip A**,Chip F,DSOG K,FROW 01 33,Chip F,**DSOG K** 

如何解析和刪除重複項?

感謝

+2

多個值不要存放在一個字段。雖然Postgres確實有處理這個的函數,但使用正確的關係結構要容易得多。 –

+0

我知道這是不正確的,但我不能改變它,DB不在我的DEV端( – wozzzap

回答

2

功能string_to_array(chipset_name, ',')將調換名稱陣列。然後unnest他們並只選擇不同的值。

select distinct token 
from 
    chipset, 
    unnest(string_to_array(chipset_name, ',')) token 

    token  
------------ 
Chip A 
Chip B 
Chip F 
DSOG K 
FROW 01 33 
(5 rows)   
+0

完美!謝謝! – wozzzap

1

regexp_split_to_table不需要unnesting:

select string_agg(distinct cl, ',') 
from 
    chipset, 
    regexp_split_to_table(chipset_labels, ',') cl(cl) 
; 
       string_agg    
---------------------------------------- 
Chip A,Chip B,Chip F,DSOG K,FROW 01 33