Список элементов в категории (SQL) - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть набор данных, подобный следующему:

+-----------------+---------------------+
| job_code        | job_title           |
+-----------------+---------------------+
| finance_acct    | Business Accountant |
| finance_manager | Business Manager    |
| it_programmer   | IT Programmer       |
| it_manager      | IT Manager          |
+-----------------+---------------------+

и т. Д.

Я хочу взять все названия должностей, которые имеют одинаковую первую половину их кода задания, и распечататьих как список.Например:

финансы: бухгалтер, бизнес-менеджер

it: программист, ИТ-менеджер

Как мне это сделать?Я знаю, как использовать SUBSTR, чтобы получить первую часть кода задания.В принципе я могу создать левый столбец нормально.Однако я столкнулся с несколькими проблемами:

  1. Используя команду GROUP BY, я постоянно получал ошибку ORA-00979 («не выражение GROUP BY»).
  2. Я могуНе могу понять, как сделать список, разделенный запятыми.Я использовал CONCAT, но даже тогда вы получите лишнюю запятую после последней записи для данной строки.В Интернете я видел кое-что о команде STUFF, но знаю, что без этого можно обойтись.

Есть какие-нибудь советы?Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

regexp_substr() приходит на ум, чтобы извлечь нужную часть из job_code.Остальное просто агрегация и listagg():

select regexp_substr(job_code, '[^_]+', 1, 1) as half_job_code,
       listagg(job_title, ', ') within group (order by job_title) as job_titles
from t
group by regexp_substr(job_code, '[^_]+', 1, 1)
0 голосов
/ 01 декабря 2018

Попробуйте функцию listagg .Вы можете указать разделитель и сгруппировать его на основе требуемых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...