Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
Database Servers
DB2InformixIngresMS SQLOraclePervasive.SQLPostgreSQLProgressSybase
Desktop Databases
FileMakerFoxProMS AccessParadox
General
General DB TopicsDatabase Theory
Related Topics
Java Development.NET DevelopmentVB DevelopmentMore Topics ...

Database Forum / DB2 Topics / February 2006

Tip: Looking for answers? Try searching our database.

Aggregating strings

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Serge Rielau - 24 Feb 2006 15:24 GMT
Hi folks,

One the more frequently asked questions is how to "sum" up strings by
virtue of concatenating them in an aggregate function.
Her eis a rather simpel solution that may be worth sharing (you'll be
teh judge):
DROP TABLE T;
CREATE TABLE T(servername VARCHAR(15), volume VARCHAR(10), capacity
VARCHAR(10));
INSERT INTO T VALUES
('ServerA', 'Vol1', '5GB'),
('ServerB', 'Vol1', '5GB'),
('ServerC', 'Vol2', '11GB'),
('ServerD', 'Vol2', '11GB'),
('ServerE', 'Vol3', '20GB');

SELECT Volume, Capacity,
       VARCHAR(REPLACE(REPLACE(VARCHAR(XML2CLOB(XMLAGG(XMLELEMENT(NAME
a, ServerName)
                                        ORDER BY ServerName)), 60),
                              '<A>', ''),
               '</A>', ','), 60) AS ServerList
  FROM T GROUP BY Volume, Capacity;

VOLUME     CAPACITY   SERVERLIST
---------- ---------- ------------------
Vol1       5GB        ServerA,ServerB,
Vol2       11GB       ServerC,ServerD,
Vol3       20GB       ServerE,

  3 record(s) selected.
Signature

Serge Rielau
DB2 Solutions Development
IBM Toronto Lab

Bob Stearns - 24 Feb 2006 20:43 GMT
> Hi folks,
>
[quoted text clipped - 27 lines]
>
>   3 record(s) selected.

Thanks a lot for a solution to a problem that has been worrying us for a
while.

What level of DB2 did the XML functions appear?

Can this be wrapped in a function with the argument 'ServerName' (I
don't see it but you are more expert here)?

Is there any easy way to remove the trailing comma? This would be easy
if SUBSTR understood negative start and length parameters like PHP.
(Hint, hint)

The following formatting may be a little easier to comprehend (if I've
understood it myself):

SELECT Volume, Capacity,
        VARCHAR(
       REPLACE(
        REPLACE(
           VARCHAR(
            XML2CLOB(
               XMLAGG(
                XMLELEMENT(NAME  a, ServerName)
                                ORDER BY ServerName)
                ),
            60),
                    '<A>', ''),
                '</A>', ','),
       60) AS ServerList
Serge Rielau - 24 Feb 2006 21:02 GMT
DB2 V8.1 GA for LUW I think (at least there is no change marker on the
docs):
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/ad
min/r0000736.htm


You can't wrap aggrehgates into functions. They need the context of
their group. (Same for MAX, MIN, etc...)

Cheers
Serge
Signature

Serge Rielau
DB2 Solutions Development
IBM Toronto Lab

Brian Tkatch - 27 Feb 2006 18:08 GMT
Wow, that's another good one. I'm not even sure i knew of the XML
FUNCTIONs. I do find it odd that it's listed under Expressions though.

Just last week i was working on something that could use this, and
ended up implementing a FOR LOOP. This may replace that on the next
iteration.

B.
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.