Количество слов для всех слов в столбце Oracle BI

Я пользователь Oracle BI (версия 11.1.1.7.141014). У меня есть текстовый столбец «описание», и я хотел бы создать новую таблицу с количеством слов для всех слов в этом столбце. Так, например:

Источник:

Description
___________
This is a test
Just a test

Результат:

Word    Count
_____________
a       2
test    2
is      1
just    1
this    1

Было бы возможно? У меня есть учетная запись пользователя (без функций администрирования), но я могу работать с отчетами (таблицы, сводные таблицы и т. д.), структурами данных, пользовательскими запросами SQL (ограниченными отчетами и структурами данных) и т. д.

заранее спасибо


person tripuz    schedule 31.03.2016    source источник
comment
Вам нужен парсер и некоторые правила. Это сложно. Слово похоже на одно слово или на два?   -  person kevinskio    schedule 31.03.2016
comment
Думаю, я бы каким-то образом отфильтровал такие стоп-слова; кстати, колонка на итальянском языке, поэтому никаких английских сокращений (может быть, итальянских...).   -  person tripuz    schedule 31.03.2016
comment
Используйте пробел в качестве разделителя. Проверьте это. stackoverflow.com/a/30044861/3470178   -  person Juan Carlos Oropeza    schedule 31.03.2016
comment
Это и Это одно и то же или разные?   -  person mathguy    schedule 31.03.2016
comment
То же самое (без учета регистра)   -  person tripuz    schedule 31.03.2016
comment
@JuanCarlosOropeza Я попробовал решение из другого поста, но у меня возникли проблемы с его настройкой в ​​моем отчете (много ошибок SQL), попробую завтра.   -  person tripuz    schedule 31.03.2016
comment
@tripuz Я не хотел писать код, потому что у меня нет ни одного экземпляра Oracle BI, который можно было бы попробовать. Но поищите oracle split string into row, возможно, вы найдете лучший ответ.   -  person Juan Carlos Oropeza    schedule 31.03.2016
comment
Примечание. Лучше избегать использования зарезервированных слов (например, COUNT) в качестве имен столбцов, это может только вызвать проблемы. Вы можете называть столбцы REPORT как угодно, но не столбцы таблицы в базе данных. В моем решении я назвал столбец word_count.   -  person mathguy    schedule 31.03.2016


Ответы (1)


Определив «слово» как любую последовательность из одной или нескольких последовательных английских букв (верхнего или нижнего регистра) и предполагая, что «это» и «это» одно и то же, вот одно из возможных решений. Первая строка кода оканчивается на "... from a)", подставьте имя вашей таблицы вместо "a" (для собственных целей тестирования я создал таблицу с вашими входными данными и назвал ее a).

with b (d, ct) as (select Description, regexp_count(Description, '[a-zA-Z]+') from a),
     h (pos)       as (select level from dual connect by level <= 100),
     prep (word)   as (select lower(regexp_substr(d, '[a-zA-Z]+', 1, pos)) from b, h where pos <= ct)
select   word, count(word) as word_count 
from     prep 
group by word
order by word_count desc, word
/

Решение должно заранее знать максимальное количество слов на входную строку; Я использовал 100, которые можно увеличить (в определении h во второй строке кода).

person mathguy    schedule 31.03.2016
comment
Спасибо, я попробовал это решение, вставив его в свой анализ в пользовательское поле SQL-запроса, заменив имя моей таблицы вместо a и имя столбца вместо описания. К сожалению, когда я пытаюсь выполнить запрос в своем отчете, OBIEE говорит, что в {call NQSGetQueryColumnInfo('SELECT word FROM prep')... может быть, я не могу определить новые временные таблицы в OBIEE в Сюда? - person tripuz; 01.04.2016