在Oracle 9i中的单行中检索列的多行

问题描述 投票:0回答:2

使用Oracle 9i

Desc 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 

我想在一行中检索“TechnicalSpecs”列,如下所示:

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

请给我一个想法,并在这方面帮助我.....

商祺 拉赫曼

oracle oracle9i
2个回答
0
投票

我没有访问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;  

0
投票

我猜你的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' 
© www.soinside.com 2019 - 2024. All rights reserved.