2016-03-29 2 views
0

Я просматриваю строки данных транспортировки, и я хочу иметь возможность манипулировать данными для записей «Uber Pool» и «UberPool» как один и тот же способ транзита.Как сгруппировать два разных написания как один

Что я могу сделать, чтобы мои функции суммировали все записи таблицы двух разных написаний в одну строку в выходной таблице?

+0

Сложная и иногда специфическая для языка проблема. Попробуйте использовать верхнюю/нижнюю/звуковую и т. Д. – jarlh

+2

Если различные варианты написания заранее известны, вы можете использовать выражения case для обработки разных значений как одинаковые или настроить таблицу сопоставления, если существует много разных значений. Если вам нужно, чтобы она была динамичной, проблема становилась намного сложнее. – jpw

+0

Определите правило, по которому две записи считаются равными. Is 'UberPool' = 'uBERpOOL'? Is 'Uber Pool' = 'U-b-e-r * P-o-o-l'? Is 'UberPool' = 'OoberPool'? –

ответ

1

Как @jpw сказал, это зависит от ваших данных, но, судя по его помощью вы можете сделать это с помощью CASE EXPRESSION в вашем GROUP BY пункте:

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 

Вы не маркировать свой RDBMS, но в некоторых из них вы можете указать псевдоним столбца из выбранного в группе, по которому будет выглядеть лучше.

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

Это слишком длинный комментарий.

Вы можете удалить пробелы и стандартизировать случай строки, делая что-то вроде этого:

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

Это возвращает один из имен согласующих как в первом столбце. Вам может показаться, что это легче работать, чем перечисление группы case.