If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

 
Go Back  dBforums > Database Server Software > DB2 > Desperately need help with xml agg

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 08-29-11, 11:36
Elliott Elliott is offline
Registered User
 
Join Date: Aug 2011
Posts: 8
Desperately need help with xml agg

Hi all,

I am not a "dba" although I play one. I have a db with a lot of many to many tables. I have created a simple query to demonstrate my problem and how I solved part of it by reading this forum.

The query:
SELECT CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE, CAPABILITIES.ENGAGEMENTTYPE.NAME,
CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER.IDOWNER, CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS.ID DELIVERYPROCESS,
CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA.IDPRACTIC EAREA, CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL.IDD ELIVERYMODEL,
CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY.IDIN DUSTRY
FROM CAPABILITIES.ENGAGEMENTTYPE, CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER,
CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS,
CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA,
CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY,
CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL
WHERE CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER.IDENGAGE MENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS.ID ENGAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA.IDENGAGEM ENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY.IDEN GAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL.IDE NGAGEMENTTYPE


The resulting data set of course contained multiple rows of data for each engagement type. Example: Delivery process table contained 3 values, industry table contained 6 values. I end up with 18 rows for the engagement type.

So I used xml aggregate to condense this to one row but that results the delivery process and industry columns containing the same info repeated multiple times separated by a comma - which I can use js to get the unique values. Seemed workable.

Now, however, with data coming into the db and all these "aggregated" columns, I keep needing to bump up the number of characters used in the xml aggregated code (for 43 engagement types), I now have to set the varchars to be 32000 characters to make it work. There will be lots more engagement types and this won't work.

Here is the full query an ACTUAL dba put together for me that is failing - I modified the varchars so you can see. I have to believe there is a better way to write this query and eliminate the issue from the beginning. I will be glad to answer any questions or provide additional information if someone can give me some guidance... right now, I am screwed.

select a.* , b.IDINDUSTRY,b.IDDELIVERYMODEL from (
SELECT CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE,
CAPABILITIES.ENGAGEMENTTYPE.NAME, CAPABILITIES.ENGAGEMENTTYPE.DESCRIPTION,
CAPABILITIES.STATUS.NAME AS STATUS, CAPABILITIES.ENGAGEMENTTYPE.STATUSDATE,
CAPABILITIES.SERVICELINE.NAME AS SERVICELINE, CAPABILITIES.SERVICELINE.IDSERVICELINE, BOWNER.NAME AS OWNER, BOWNER.IDOWNER, CAPABILITIES.WEBLINKS.TITLE,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.DELIVERYPROCESS.NAME))) AS VARCHAR (16000)), 3) AS DELIVERYPROCESS,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.PRACTICEAREA.NAME))) AS VARCHAR (16000)), 3) AS PRACTICEAREA,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.INDUSTRY.NAME))) AS VARCHAR (16000)), 3) AS INDUSTRY, SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.DELIVERYMODEL.NAME))) AS VARCHAR (32000)), 3) AS DELIVERYMODEL,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.OWNER.NAME))) AS VARCHAR (16000)), 3) AS CONTENTOWNER, SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.OWNER.IDOWNER))) AS VARCHAR (16000)), 3) AS CONTENTIDOWNER,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.DELIVERYPROCESS.IDDELIVERYPROCESS))) AS VARCHAR (16000)), 3) AS IDDELIVERYPROCESS,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.PRACTICEAREA.IDPRACTICEAREA))) AS VARCHAR (16000)), 3) AS IDPRACTICEAREA
FROM CAPABILITIES.ENGAGEMENTTYPE, CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER,
CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS,
CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA,
CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY,
CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL, CAPABILITIES.OWNER,
CAPABILITIES.OWNER AS BOWNER, CAPABILITIES.DELIVERYMODEL,
CAPABILITIES.DELIVERYPROCESS, CAPABILITIES.INDUSTRY,
CAPABILITIES.PRACTICEAREA, CAPABILITIES.SERVICELINE,
CAPABILITIES.WEBLINKS, CAPABILITIES.STATUS
WHERE CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER.IDENGAGE MENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER.IDOWNER = CAPABILITIES.OWNER.IDOWNER
AND CAPABILITIES.ENGAGEMENTTYPE.IDOWNER = BOWNER.IDOWNER
AND CAPABILITIES.ENGAGEMENTTYPE.IDSERVICELINE = CAPABILITIES.SERVICELINE.IDSERVICELINE
AND CAPABILITIES.ENGAGEMENTTYPE.IDWEBLINK = CAPABILITIES.WEBLINKS.IDWEBLINK
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS.ID ENGAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS.ID DELIVERYPROCESS = CAPABILITIES.DELIVERYPROCESS.IDDELIVERYPROCESS
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA.IDENGAGEM ENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA.IDPRACTIC EAREA = CAPABILITIES.PRACTICEAREA.IDPRACTICEAREA
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY.IDEN GAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY.IDIN DUSTRY = CAPABILITIES.INDUSTRY.IDINDUSTRY
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL.IDE NGAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL.IDD ELIVERYMODEL = CAPABILITIES.DELIVERYMODEL.IDDELIVERYMODEL
AND CAPABILITIES.ENGAGEMENTTYPE.IDSTATUS = CAPABILITIES.STATUS.IDSTATUS
GROUP BY CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE, CAPABILITIES.ENGAGEMENTTYPE.NAME,
CAPABILITIES.ENGAGEMENTTYPE.DESCRIPTION, CAPABILITIES.STATUS.NAME,
CAPABILITIES.ENGAGEMENTTYPE.STATUSDATE, CAPABILITIES.SERVICELINE.NAME, CAPABILITIES.SERVICELINE.IDSERVICELINE,
BOWNER.NAME, BOWNER.IDOWNER, CAPABILITIES.WEBLINKS.TITLE )a,

(
SELECT CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.INDUSTRY.IDINDUSTRY))) AS VARCHAR (16000)), 3) AS IDINDUSTRY,
SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', CAPABILITIES.DELIVERYMODEL.IDDELIVERYMODEL))) AS VARCHAR (32000)), 3) AS IDDELIVERYMODEL


FROM CAPABILITIES.ENGAGEMENTTYPE, CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER,
CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS,
CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA,
CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY,
CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL, CAPABILITIES.OWNER,
CAPABILITIES.OWNER AS BOWNER, CAPABILITIES.DELIVERYMODEL,
CAPABILITIES.DELIVERYPROCESS, CAPABILITIES.INDUSTRY,
CAPABILITIES.PRACTICEAREA, CAPABILITIES.SERVICELINE,
CAPABILITIES.WEBLINKS, CAPABILITIES.STATUS
WHERE CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER.IDENGAGE MENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER.IDOWNER = CAPABILITIES.OWNER.IDOWNER
AND CAPABILITIES.ENGAGEMENTTYPE.IDOWNER = BOWNER.IDOWNER
AND CAPABILITIES.ENGAGEMENTTYPE.IDSERVICELINE = CAPABILITIES.SERVICELINE.IDSERVICELINE
AND CAPABILITIES.ENGAGEMENTTYPE.IDWEBLINK = CAPABILITIES.WEBLINKS.IDWEBLINK
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS.ID ENGAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS.ID DELIVERYPROCESS = CAPABILITIES.DELIVERYPROCESS.IDDELIVERYPROCESS
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA.IDENGAGEM ENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA.IDPRACTIC EAREA = CAPABILITIES.PRACTICEAREA.IDPRACTICEAREA
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY.IDEN GAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY.IDIN DUSTRY = CAPABILITIES.INDUSTRY.IDINDUSTRY
AND CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE = CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL.IDE NGAGEMENTTYPE
AND CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL.IDD ELIVERYMODEL = CAPABILITIES.DELIVERYMODEL.IDDELIVERYMODEL
AND CAPABILITIES.ENGAGEMENTTYPE.IDSTATUS = CAPABILITIES.STATUS.IDSTATUS
GROUP BY CAPABILITIES.ENGAGEMENTTYPE.IDENGAGEMENTTYPE, CAPABILITIES.ENGAGEMENTTYPE.NAME,
CAPABILITIES.ENGAGEMENTTYPE.DESCRIPTION, CAPABILITIES.STATUS.NAME,
CAPABILITIES.ENGAGEMENTTYPE.STATUSDATE, CAPABILITIES.SERVICELINE.NAME, CAPABILITIES.SERVICELINE.IDSERVICELINE,
BOWNER.NAME, BOWNER.IDOWNER, CAPABILITIES.WEBLINKS.TITLE) b
where a.IDENGAGEMENTTYPE= b.IDENGAGEMENTTYPE
ORDER BY a.NAME
Reply With Quote
  #2 (permalink)  
Old 08-29-11, 19:12
tonkuma tonkuma is offline
Registered User
 
Join Date: Feb 2008
Location: Japan
Posts: 2,193
Quote:
The resulting data set of course contained multiple rows of data for each engagement type. Example: Delivery process table contained 3 values, industry table contained 6 values. I end up with 18 rows for the engagement type.
Here is a solution for such queries.
(See Example b.)

Example a:
2 female and 1 male for deptno = A00, resulting 2 rows.
3 female and 2 male for deptno = E11, resulting 6 rows.
0 female and 4 male for deptno = E21, resulting 4 rows.

Note: LEFT JOINs were used to include deptno = E21 of which number of female was 0 in the result.
Code:
------------------------------ Commands Entered ------------------------------
SELECT d.deptno
     , d.mgrno
     , dm.firstnme || ' ' || dm.lastname mgrname
     , ef.empno female
     , em.empno male
 FROM  department d
 INNER JOIN
       employee   dm
   ON  dm.empno = d.mgrno
 LEFT  OUTER JOIN
       employee   ef
   ON  ef.workdept = d.deptno
   AND ef.sex = 'F'
 LEFT  OUTER JOIN
       employee   em
   ON  em.workdept = d.deptno
   AND em.sex = 'M'
 WHERE d.deptno IN ('A00' , 'E11' , 'E21')
 ORDER BY
       d.deptno
;
------------------------------------------------------------------------------

DEPTNO MGRNO  MGRNAME                      FEMALE MALE  
------ ------ ---------------------------- ------ ------
A00    000010 CHRISTINE HAAS               000010 000110
A00    000010 CHRISTINE HAAS               000010 000120
E11    000090 EILEEN HENDERSON             000090 000300
E11    000090 EILEEN HENDERSON             000090 000290
E11    000090 EILEEN HENDERSON             000280 000300
E11    000090 EILEEN HENDERSON             000280 000290
E11    000090 EILEEN HENDERSON             000310 000300
E11    000090 EILEEN HENDERSON             000310 000290
E21    000100 THEODORE SPENSER             -      000340
E21    000100 THEODORE SPENSER             -      000320
E21    000100 THEODORE SPENSER             -      000100
E21    000100 THEODORE SPENSER             -      000330

  12 record(s) selected.
Example b:
2 female and 1 male for deptno = A00, resulting 2 rows.
3 female and 2 male for deptno = E11, resulting 3 rows.
0 female and 4 male for deptno = E21, resulting 4 rows.
Code:
------------------------------ Commands Entered ------------------------------
SELECT d.deptno
     , d.mgrno
     , CASE COALESCE(ef.rn , em.rn)
       WHEN 1 THEN
            dm.firstnme || ' ' || dm.lastname
       ELSE ''
       END  AS mgrname
     , ef.empno female
     , em.empno male
 FROM  department d
 INNER JOIN
       employee   dm
   ON  dm.empno = d.mgrno
 LEFT  OUTER JOIN

       (SELECT empno
             , workdept
             , ROW_NUMBER() OVER(PARTITION BY workdept) AS rn
         FROM  employee
         WHERE sex = 'F'
       ) ef
 FULL  OUTER JOIN
       (SELECT empno
             , workdept
             , ROW_NUMBER() OVER(PARTITION BY workdept) AS rn
         FROM  employee
         WHERE sex = 'M'
       ) em
   ON  em.workdept = ef.workdept
   AND em.rn       = ef.rn

   ON  COALESCE(ef.workdept , em.workdept) = d.deptno
 WHERE
       d.deptno IN ('A00' , 'E11' , 'E21')
 ORDER BY
       d.deptno
;
------------------------------------------------------------------------------

DEPTNO MGRNO  MGRNAME                      FEMALE MALE  
------ ------ ---------------------------- ------ ------
A00    000010 CHRISTINE HAAS               000010 000110
A00    000010                              -      000120
E11    000090 EILEEN HENDERSON             000090 000290
E11    000090                              000280 000300
E11    000090                              000310 -     
E21    000100 THEODORE SPENSER             -      000100
E21    000100                              -      000320
E21    000100                              -      000330
E21    000100                              -      000340

  9 record(s) selected.
Reply With Quote
  #3 (permalink)  
Old 08-29-11, 19:28
tonkuma tonkuma is offline
Registered User
 
Join Date: Feb 2008
Location: Japan
Posts: 2,193
If you want to aggregate the result,
aggregate each tables in subqueries, like...

Example c:
Code:
------------------------------ Commands Entered ------------------------------
SELECT d.deptno
     , d.mgrno
     , dm.firstnme || ' ' || dm.lastname mgrname
     , ef.female
     , em.male
 FROM  department d
 INNER JOIN
       employee   dm
   ON  dm.empno = d.mgrno
 LEFT  OUTER JOIN
       LATERAL
       (SELECT workdept
             , SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', empno))) AS VARCHAR (30)), 3) AS female 
         FROM  employee ef
         WHERE ef.workdept = d.deptno
           AND ef.sex = 'F'
         GROUP BY
               workdept
       ) ef
   ON  0=0
 LEFT  OUTER JOIN
       LATERAL
       (SELECT workdept
             , SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', empno))) AS VARCHAR (40)), 3) AS male 
         FROM  employee em
         WHERE em.workdept = d.deptno
           AND em.sex = 'M'
         GROUP BY
               workdept
       ) em
   ON  0=0
 WHERE d.deptno IN ('A00' , 'E11' , 'E21')
 ORDER BY
       d.deptno
;
------------------------------------------------------------------------------

DEPTNO MGRNO  MGRNAME                      FEMALE                         MALE                                    
------ ------ ---------------------------- ------------------------------ ----------------------------------------
A00    000010 CHRISTINE HAAS               000010                         000110, 000120                          
E11    000090 EILEEN HENDERSON             000310, 000280, 000090         000300, 000290                          
E21    000100 THEODORE SPENSER             -                              000340, 000320, 000100, 000330          

  3 record(s) selected.
Reply With Quote
  #4 (permalink)  
Old 08-29-11, 19:39
tonkuma tonkuma is offline
Registered User
 
Join Date: Feb 2008
Location: Japan
Posts: 2,193
Please use correlation-name for tables, like...

correlation-names: "et", "etc", "etd", so on.
Code:
SELECT et. IDENGAGEMENTTYPE
     , et. NAME
     , etc.IDOWNER
     , etd.ID DELIVERYPROCESS
     , etp.IDPRACTICEAREA
     , etu.IDD ELIVERYMODEL
     , ets.IDIN DUSTRY
 FROM  CAPABILITIES.ENGAGEMENTTYPE                     et
     , CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER       etc
     , CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS etd
     , CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA        etp
     , CAPABILITIES.ENGAGEMENTTYPE_SUPPORTS_INDUSTRY   ets
     , CAPABILITIES.ENGAGEMENTTYPE_USES_DELIVERYMODEL  etu
 WHERE et.IDENGAGEMENTTYPE = etc.IDENGAGE MENTTYPE
   AND et.IDENGAGEMENTTYPE = etd.ID ENGAGEMENTTYPE
   AND et.IDENGAGEMENTTYPE = etp.IDENGAGEM ENTTYPE
   AND et.IDENGAGEMENTTYPE = ets.IDEN GAGEMENTTYPE
   AND et.IDENGAGEMENTTYPE = etu.IDE NGAGEMENTTYPE
Reply With Quote
  #5 (permalink)  
Old 08-30-11, 05:09
tonkuma tonkuma is offline
Registered User
 
Join Date: Feb 2008
Location: Japan
Posts: 2,193
How about this for your full query?

Note 1: two subqueries were omitted.
Note 2: VARCHAR (1600) might be too long.
Code:
SELECT IDENGAGEMENTTYPE
     , NAME
     , DESCRIPTION
     , STATUS
     , STATUSDATE
     , SERVICELINE
     , IDSERVICELINE
     , OWNER
     , IDOWNER
     , TITLE
     , DELIVERYPROCESS
     , PRACTICEAREA
--     , INDUSTRY
--     , DELIVERYMODEL
     , CONTENTOWNER
     , CONTENTIDOWNER
     , IDDELIVERYPROCESS
     , IDPRACTICEAREA
--     , IDINDUSTRY
--     , IDDELIVERYMODEL
 FROM  (SELECT et. IDENGAGEMENTTYPE
             , et. NAME
             , et. DESCRIPTION
             , sts.NAME AS STATUS
             , et. STATUSDATE
             , sln.NAME AS SERVICELINE
             , sln.IDSERVICELINE
             , own.NAME AS OWNER
             , own.IDOWNER
             , wlk.TITLE
         FROM  CAPABILITIES.ENGAGEMENTTYPE                     et
             , CAPABILITIES.OWNER                              own
             , CAPABILITIES.SERVICELINE                        sln
             , CAPABILITIES.WEBLINKS                           wlk
             , CAPABILITIES.STATUS                             sts
         WHERE
               et. IDOWNER           = own.IDOWNER
           AND et. IDSERVICELINE     = sln.IDSERVICELINE
           AND et. IDWEBLINK         = wlk.IDWEBLINK
           AND et. IDSTATUS          = sts.IDSTATUS
       ) et
     , LATERAL
       (SELECT SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', own.NAME             ))) AS VARCHAR (1600)), 3) AS CONTENTOWNER
             , SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', own.IDOWNER          ))) AS VARCHAR (1600)), 3) AS CONTENTIDOWNER
         FROM  CAPABILITIES.ENGAGEMENTTYPE_CONTENT_OWNER       etow
             , CAPABILITIES.OWNER                              own
         WHERE et.  IDENGAGEMENTTYPE  = etow.IDENGAGEMENTTYPE
           AND etow.IDOWNER           = own. IDOWNER
         GROUP BY
               et.  IDENGAGEMENTTYPE
       ) cown
     , LATERAL
       (SELECT SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', dp. NAME             ))) AS VARCHAR (1600)), 3) AS DELIVERYPROCESS
             , SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', dp. IDDELIVERYPROCESS))) AS VARCHAR (1600)), 3) AS IDDELIVERYPROCESS
         FROM  CAPABILITIES.ENGAGEMENTTYPE_HAS_DELIVERYPROCESS etdp
             , CAPABILITIES.DELIVERYPROCESS                    dp
         WHERE et.  IDENGAGEMENTTYPE  = etdp.IDENGAGEMENTTYPE
           AND etdp.IDDELIVERYPROCESS = dp.  IDDELIVERYPROCESS
         GROUP BY
               et.  IDENGAGEMENTTYPE
       ) dp
     , LATERAL
       (SELECT SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', pa. NAME             ))) AS VARCHAR (1600)), 3) AS PRACTICEAREA
             , SUBSTR(XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(', ', pa. IDPRACTICEAREA   ))) AS VARCHAR (1600)), 3) AS IDPRACTICEAREA
         FROM  CAPABILITIES.ENGAGEMENTTYPE_PRACTICEAREA        etpa
             , CAPABILITIES.PRACTICEAREA                       pa
         WHERE et.  IDENGAGEMENTTYPE  = etpa.IDENGAGEMENTTYPE
           AND etpa.IDPRACTICEAREA    = pa.  IDPRACTICEAREA
         GROUP BY
               et.  IDENGAGEMENTTYPE
       ) pa
...
...
 ORDER BY
       et.NAME  
;

Last edited by tonkuma; 08-30-11 at 09:01. Reason: Specify column names explicitly in outmost SELECT clause to reorder the columns.
Reply With Quote
  #6 (permalink)  
Old 08-30-11, 09:36
Elliott Elliott is offline
Registered User
 
Join Date: Aug 2011
Posts: 8
Thank you so very much. I had thought if I could break it down into multiple queries, it might work but I had no idea how to do it. With your example, I modified the query adding in the couple of additional tables I needed and it worked like a charm. I even reduced the varchar from 1600 to 1024 and it worked fine. It solved several issues, reduced the size of the query itself, and allowed me to removed some functions in code that were necessary to modify the previous output to work within my application framework. Again, thank you so very much. (Now I need to modify a dozen other queries.)
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On