2016-03-29 6 views
0

Ich schaue auf Zeilen von Transportdaten und ich möchte in der Lage sein, die Daten für Einträge von 'Uber Pool' und 'UberPool' als die gleiche Art von Transit zu manipulieren.So gruppieren Sie zwei verschiedene Schreibweisen als eine

Was kann ich tun, damit meine Funktionen alle Tabelleneinträge der zwei verschiedenen Schreibweisen in einer Zeile in der Ausgabetabelle zusammenfassen?

+0

Ein komplexes und manchmal sprachspezifisches Problem. Versuchen Sie oben/unten/soundex etc. – jarlh

+2

Wenn die verschiedenen Schreibweisen im Voraus bekannt sind, können Sie entweder Case-Ausdrücke verwenden, um verschiedene Werte als gleich zu behandeln, oder eine Mapping-Tabelle einrichten, wenn es viele verschiedene Werte gibt. Wenn Sie es brauchen, um dynamisch zu sein, wird das Problem viel schwieriger. – jpw

+0

Definieren Sie die Regel, nach der zwei Einträge als gleich gelten. Ist 'UberPool' = 'UBERpOOL'? Ist Uber Pool = U-b-e-r * P-o-o-l? Ist 'UberPool' = 'OberPool'? –

Antwort

1

Wie @jpw sagte, es hängt Ihre Daten auf, sondern von den Blicken von ihm können Sie es mit CASE EXPRESSION in Ihrer GROUP BY Klausel:

SELECT CASE t.name = 'Uber Pool' then 'UberPool' else t.name end as name,count(*) 
FROM YourTable t 
GROUP BY CASE t.name = 'Uber Pool' then 'UberPool' else t.name end 

Sie nicht Ihre RDBMS Tag haben, aber in einigen von ihnen können Sie den Spaltenalias von der Auswahl in der Gruppe angeben, nach der besser aussieht.

SELECT CASE t.name = 'Uber Pool' then 'UberPool' else t.name end as new_name,count(*) 
FROM YourTable t 
GROUP BY new_name 
1

Dies ist zu lang für einen Kommentar.

Sie können Leerzeichen entfernen und den Fall des Strings standardisieren, indem Sie etwas wie dies zu tun:

select min(t.name) as name, . . . 
from t 
group by lower(replace(t.name, ' ', '')) 

Dies ruft eine der passenden Namen als erste Spalte. Vielleicht finden Sie es einfacher zu arbeiten, als eine Reihe von case s aufzulisten.

Verwandte Themen