varsh12 Ответов: 1

Группировка по столбцу CLOB


У меня есть столбец CLOB с нижеприведенным выводом. Я хочу, чтобы группа по моим данным, основанные на поле типа CLOB. Я пробовал, но это дает группу по каждой строке.

Column_Name # Status_reason
PS-099:INVALID SERIALS : 111111111323
PS-099:INVALID SERIALS : 3434343434555555555
PS-099:INVALID SERIALS : 222222277777777777
PS-099:INVALID SERIALS : 444444444444444444
PS-099:INVALID SERIALS : 7674389789043942444
PS-022:PRODUCT IS TEMP LOCKED


Мое требование заключается в том, что мой результат будет выглядеть следующим образом:

Статус _reason Count(*)
PS-099:НЕДОПУСТИМЫЕ СЕРИАЛЫ 5
PS-022:ПРОДУКТ TEMP LOCKED 1

Пожалуйста помогите

Что я уже пробовал:

select to_char(c.status_reason),count(*) from <tablename> c group by to_char(c.status_reason)

RickZeeland

Какую базу данных вы используете ?

1 Ответов

Рейтинг:
0

Wendelius

Вы можете попробовать использовать DBMS_LOB.Функцию substr[^] или DBMS_LOB.INSTR[^]

Например

WITH Partials AS (
   SELECT 
      CASE 
         WHEN DBMS_LOB.INSTR(c.status_reason, 'PS-099:INVALID SERIALS') > 0 
            THEN 'PS-099:INVALID SERIALS'
         WHEN DBMS_LOB.INSTR(c.status_reason, 'PS-022:PRODUCT IS TEMP LOCKED') > 0 
            THEN 'PS-022:PRODUCT IS TEMP LOCKED'
         ELSE 'Unknown'
      END AS TextPart
   FROM YourTable c
)
SELECT a.TextPart,
       COUNT(*)
FROM Partials a


varsh12

Спасибо за информацию. Но я получаю ошибку недопустимого идентификатора для "DBMS_LOB.INSTR"

Wendelius

Мало что нужно проверить
- Убедитесь, что пакет был правильно создан, см. DBMS_LOB[^]
- Убедитесь, что у вас есть привилегия выполнения для пакета
- Убедитесь, что существует либо открытый синоним, либо определите схему в вызове (sys.DBMS_LOB.INSTR)