?
Solved

Oracle 10g - Concatonate multiple rows

Posted on 2013-05-17
8
Medium Priority
?
536 Views
Last Modified: 2013-05-17
Experts,

A table contains text comments for an order. During input, the application breaks the text at  60 char and inserts as multiple rows. Each row is given a sequential line number.

I need to output this data in a report, but doing so as-is looks very broken and choppy.  I want to use a query to concatenate the rows into one and pass that into the report designer where it can be properly formatted

A simple Select looks like this:
Select
Line_num,
Line_text 
from Ord_Comment 
where CompCode = ‘A1’
and Ord_num = 628649

Open in new window

Output looks like
1	SO
2	CS Hold 5 Items are being ordered in less tha
3	n Full
4	Master Case Qty. Emailed customer to revise P
5	O. JO 4-23

Open in new window


Desired output is a single column, single row with all Line_Text concatenated. Note:  there are CR/LF after row 1 and 3, the character needs to remain in the concatenated string

Can this be done in a standard query without creating a user defined function?
0
Comment
Question by:JDCam
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
8 Comments
 
LVL 77

Assisted Solution

by:slightwv (䄆 Netminder)
slightwv (䄆 Netminder) earned 1000 total points
ID: 39174761
Try this:

drop table tab1 purge;
create table tab1(compCode char(2), ord_num number, line_num number, line_text varchar2(50));

--add a CHR(10) at the end of line 1 and 3
insert into tab1 values('A1',628649,1,'SO' || chr(10));
insert into tab1 values('A1',628649,2,'CS Hold 5 Items are being ordered in less tha');
insert into tab1 values('A1',628649,3,'n Full' || chr(10));
insert into tab1 values('A1',628649,4,'Master Case Qty. Emailed customer to revise P');
insert into tab1 values('A1',628649,5,'O. JO 4-23');
--dummy row justs for grins
insert into tab1 values('ZZ',12345,1,'Hello World');
commit;


Select
Line_num,
Line_text 
from tab1
where CompCode = 'A1'
and Ord_num = 628649
/


select 
 TRIM(
           EXTRACT(XMLAGG(XMLELEMENT("s", line_text || ' ') order by line_num asc), '/s/text()').getclobval()
       )
from tab1
where CompCode = 'A1'
   and Ord_num = 628649
group by compCode,ord_num;

Open in new window

0
 
LVL 32

Accepted Solution

by:
awking00 earned 1000 total points
ID: 39174944
slightwv,
I think concatenating the space will produce results like -
SQL> select
  2   TRIM(
  3             EXTRACT(XMLAGG(XMLELEMENT("s", line_text||' ') order by line_num
 asc), '/s/text()').getclobval()
  4         )
  5  from tab1
  6  where CompCode = 'A1'
  7     and Ord_num = 628649
  8  group by compCode,ord_num;

TRIM(EXTRACT(XMLAGG(XMLELEMENT("S",LINE_TEXT||'')ORDERBYLINE_NUMASC),'/S/TEXT()'
--------------------------------------------------------------------------------
SO
 CS Hold 5 Items are being ordered in less tha n Full
 Master Case Qty. Emailed customer to revise P O. JO 4-23
Where there is a space between the 'tha' and 'n' plus a space after each line feed.

Removing the space concatenation(which also removes the need for the trim function) would produce results like this -
SQL> select
  2             EXTRACT(XMLAGG(XMLELEMENT("s", line_text) order by line_num asc)
, '/s/text()').getclobval()
  3  from tab1
  4  where CompCode = 'A1'
  5     and Ord_num = 628649
  6  group by compCode,ord_num;

EXTRACT(XMLAGG(XMLELEMENT("S",LINE_TEXT)ORDERBYLINE_NUMASC),'/S/TEXT()').GETCLOB
--------------------------------------------------------------------------------
SO
CS Hold 5 Items are being ordered in less than Full
Master Case Qty. Emailed customer to revise PO. JO 4-23

which may be more desirable.
0
 
LVL 77

Expert Comment

by:slightwv (䄆 Netminder)
ID: 39174958
>>which may be more desirable.

Good point!
0
Stack Overflow Podcast - Frustrating Miracles

In this podcast, Stack Overflow interviewed Linux Academy CEO/Founder, Anthony James, and got his developer story!

"Follow your passion, be prepared to work hard and sacrifice, and, above all, don't let anyone limit your dreams."  - Donovan Bailey

 
LVL 1

Author Closing Comment

by:JDCam
ID: 39175747
Excellent guys.  I will share the points evenly.

I want to make a slight shange to this request. I will repost as a new question in a few moments.  Thanks
0
 
LVL 32

Expert Comment

by:awking00
ID: 39175763
I think slightwv should get the lion's share of the points since it was really his solution and I just pointed out a small anomaly.
0
 
LVL 77

Expert Comment

by:slightwv (䄆 Netminder)
ID: 39175779
It's OK awking00,

The flaw you found was just as important and to be honest, that core code was borrowed from sdstuber!
0
 
LVL 32

Expert Comment

by:awking00
ID: 39175811
Maybe we can bring Sean in on the part 2 question so he can get his due :-)
0
 
LVL 77

Expert Comment

by:slightwv (䄆 Netminder)
ID: 39175819
Let him fend for himself!!!
0

Featured Post

Understanding Linux Permissions

Linux for beginners: How to view the permissions associated with files and directories and also how you can change them.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I remember the day when someone asked me to create a user for an application developement. The user should be able to create views and materialized views and, so, I used the following syntax: (CODE) This way, I guessed, I would ensure that use…
Composite queries are used to retrieve the results from joining multiple queries after applying any filters. UNION, INTERSECT, MINUS, and UNION ALL are some of the operators used to get certain desired results.​
This video shows how to Export data from an Oracle database using the Original Export Utility.  The corresponding Import utility, which works the same way is referenced, but not demonstrated.
This video shows how to copy an entire tablespace from one database to another database using Transportable Tablespace functionality.
Suggested Courses

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question