2015-06-18 1 views
2

Если я запускаю следующий запрос я получаю результаты, как и ожидалось:Группировка цифрами или первой буквы

SELECT upper(substr(columnname, 1, 1)) 
FROM table 
GROUP BY upper(substr(columnname, 1, 1)). 

Я получаю группы для каждого исходного письма от А до Z и от 0 до 9. Но то, что я хочу что я получаю группы типа «0-9», «AC», «DF» и так далее. У меня нет идей, как группировать группы. Может ли кто-нибудь дать мне подсказку, как начать, пожалуйста?

+0

Как определяются эти «супергруппы»? Являются ли они статичными и известными заранее, или они каким-то образом управляются данными? – Stan

ответ

0

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

Если назвать эту функцию «getGroupFor», и она работает так, что:

getGroupFor('A') returns 'A-C' 
getGroupFor('B') returns 'A-C' 
... (and so on) 

Затем вы можете изменить свой выбор на группе по выходу этой функции.

SELECT getGroupFor(upper(substr(columnname, 1, 1))) FROM table GROUP BY getGroupFor(upper(substr(columnname, 1, 1))) 

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

How to create custom functions in SQLite

Другим способом было бы создать таблицу, которая может отображать письма формата letter групп, затем присоединяйте таблицы и группы столбцом «letter-group» вместо отдельных букв.

 Смежные вопросы

  • Нет связанных вопросов^_^