Получение нескольких строк столбца в одной строке в Oracle 9i - PullRequest
0 голосов
/ 05 марта 2019

Использование Oracle 9i

Описание mtitem0 (таблица)

Materailcd          Char(10),
Technicalspecs   VarChar2(1000)

Запрос:

Select Materailcd, TechnicalSpecs
From Mtitem0
Where Materailcd  = '0100000121'

MATERIALCD TECHNICALSPECS
---------- ---------------------------------------
0100000121 INDUSTRIAL GRADE SALT
               SPECIFICATIONS:-
               A) MOISTURE  MAX: 4.0
                PERCENT BY MASS.
               B) MATTER INSOLUBLES IN WATER MAX:0.50 

Я хочу получить столбец «Технические спецификации» в одну строкувот так:

MATERIALCD       TECHNICALSPECS
--------------------       ---------------------------------------
0100000121          INDUSTRIAL GRADE SALT SPECIFICATIONS:-  A) MOISTURE  MAX: 4.0  PERCENT BY MASS.

Пожалуйста, дайте мне идею и помогите мне в этом отношении .....

С уважением
Rehaman

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я полагаю, у вас есть перевод строки в столбце TECHNICALSPECS. Просто замените их одним пробелом.

Select Materailcd, replace(TechnicalSpecs, chr(10),' ') TechnicalSpecs
From Mtitem0
Where Materailcd  = '0100000121'

Если он введен из клиента Windows, у вас также могут быть символы CR, поэтому для большей безопасности удалите также:

Select Materailcd, replace(replace(TechnicalSpecs, chr(10),' '),chr(13)) TechnicalSpecs
From Mtitem0
Where Materailcd  = '0100000121' 
0 голосов
/ 05 марта 2019

У меня нет доступа к Oracle 9i, но я верю, что приведенный ниже код будет работать. пожалуйста, попробуйте и дайте мне знать

 select Materailcd     , ltrim(sys_connect_by_path(TechnicalSpecs,','),',') as staff
    from   ( select Materailcd
                  , TechnicalSpecs
                  , row_number() over (partition by Materailcd order by TechnicalSpecs) as seq
             from Mtitem0 )
    where  connect_by_isleaf = 1
    connect by seq = prior seq +1 and Materailcd = prior Materailcd
    start with seq = 1;  
...