2016-07-20 5 views
0

Ich habe Spalte mit Werten wieWie zu analysieren und entfernen Duplikate aus aggregierten Textfeld

select chipset_name from chipset 

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

ich es eine Zeile ohne doppelte aggregieren möge, aber wenn ich string_agg verwenden (distinct ..) Ich habe Duplikate

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** 

Wie werden Duplikate analysiert und entfernt?

Dank

+2

mehrere Werte in einem einzigen Feld nicht lagern. Obwohl Postgres über Funktionen verfügt, um damit umzugehen, ist es viel einfacher, eine richtige relationale Struktur zu verwenden. –

+0

Ich weiß, dass es falsch ist, aber ich kann es nicht ändern, DB ist nicht auf meiner DEV-Seite ( – wozzzap

Antwort

2

Die Funktion string_to_array(chipset_name, ',') werden die Namen auf Arrays transponieren. Dann unnest sie und wählen Sie nur verschiedene Werte.

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

Perfekt! Danke! – wozzzap

1

regexp_split_to_table nicht Entschachtelung erforderlich:

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