Возможно ли это сделать путем декодирования, выбирая сразу все столбцы, а не выбрав их отдельно?
Нет
Однако, помимо использования пивот, единственное решение, которое я вижу бы использовать PL/SQL:
1.Это как я моделируется таблицу
SELECT *
FROM (WITH tb1 (col_a, col_b, col_c, col_d, col_e, col_f) AS
(SELECT 0, 1, 2, 0, 3, 2 FROM DUAL)
SELECT *
FROM tb1)
2.I добавили бы колонки вместе с запятой между ними и сохранили бы их в таблице строк
SELECT col_a || ',' || col_b || ',' || col_c || ',' || col_d || '.' || col_e || ',' || col_f
FROM (WITH tb1 (col_a, col_b, col_c, col_d, col_e, col_f) AS (SELECT 0, 1, 2, 0, 3, 2 FROM DUAL)
SELECT *
FROM tb1)
3.Then Я хотел бы использовать REGEXP_REPLACE
заменить ваши значения на одну строку в то время
SELECT REPLACE (REGEXP_REPLACE (REPLACE ('0,1,2,0,3,2', 0, 'S'), '[1-2]', 'F'), 3, 'NA') COL_STR
FROM DUAL
4. Использование динамического SQL Я хотел бы обновить таблицу, используя ROWID или что вы собираетесь делать. Я сделал это SQL, который будет разделять строку на столбцы
SELECT REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 1) AS COL_A,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 2) AS COL_B,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 3) AS COL_C,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 4) AS COL_D,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 5) AS COL_E,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 6) AS COL_F
FROM tst1)
Все это очень утомительно, и это может занять некоторое время. Использование DECODE
или CASE
было бы проще в том, чтобы смотреть и интерпретировать и, следовательно, легче поддерживать.
Если вы хотите отобразить результат в одном столбце, это возможно. Но ваш вывод подсказывает, что результат должен быть в нескольких столбцах. Поэтому мой ответ невозможен. Вам придется использовать декодирование/случай несколько раз –
Это возможно *, открывая таблицу, декодируя отдельные строки, которые производят, а затем поворачивается назад к исходному макету; но это почти наверняка не стоит дополнительной работы, и будет проще и понятнее просто декодировать каждый столбец отдельно. –