![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
| '</DESKTOP>' FROM (SELECT M.id , M.hostname |
#3
| |||
| |||
|
|
Here is an example. But, I wondered if there would be other shorter ways. WITH * T( id , mac_address ) AS ( VALUES * ( 1 , '00:12:13:14:15:16' ) , ( 1 , '00:22:23:24:25:26' ) , ( 2 , '00:32:33:34:35:36' ) ) , M( id , hostname ) AS ( VALUES * ( 1 , 'MACHINE_ONE' ) , ( 2 , 'Machine Two' ) ) SELECT '<DESKTOP>' || * * * *XMLSERIALIZE( * * * * * XMLAGG( * * * * * * *XMLELEMENT( * * * * * * * * NAME row * * * * * * * , XMLFOREST(id , hostname) * * * * * * * , mac_address * * * * * * *) * * * * * ) * * * * * AS CLOB (50M) * * * *) * * * *|| '</DESKTOP>' * FROM (SELECT M.id , M.hostname * * * * * * *, XMLAGG( XMLFOREST(T.mac_address) ) AS mac_address * * * * * FROM M * * * * * INNER JOIN * * * * * * * *T * * * * * *ON *M.ID = T.ID * * * * *GROUP BY * * * * * * * *M.id , M.hostname * * * *) s ; The result of the query will look like the following: DESKTOP * * * * *<ROW * * * * * * * <ID>1</ID * * * * * * * <HOSTNAME>MACHINE_ONE</HOSTNAME * * * * * * * <MAC_ADDRESS>00:12:13:14:15:16</MAC_ADDRESS * * * * * * * <MAC_ADDRESS>00:22:23:24:25:26</MAC_ADDRESS * * * * *</ROW * * * * *<ROW * * * * * * * <ID>2</ID * * * * * * * <HOSTNAME>Machine Two</HOSTNAME * * * * * * * <MAC_ADDRESS>00:32:33:34:35:36</MAC_ADDRESS * * * * *</ROW /DESKTOP My some other trial queries produced extra tags or less tags than showed above. |
|
| '</DESKTOP>' |
#4
| |||
| |||
|
|
| '</DESKTOP>' FROM (SELECT M.id , M.hostname |
#5
| |||
| |||
|
|
| '</DESKTOP>' FROM M |
#6
| |||
| |||
|
#7
| |||
| |||
|
|
| '</DESKTOP>' FROM M |
#8
| |||
| |||
|
|
INNER JOIN with traditional syntax will be enough(OUTER JOIN will be not neccessary). SELECT '<DESKTOP>' || * * * *XMLSERIALIZE( * * * * * XMLAGG( * * * * * * *XMLELEMENT( * * * * * * * * NAME row * * * * * * * , XMLFOREST(id , hostname) * * * * * * * , mac_address * * * * * * * , sw_name * * * * * * *) * * * * * ) * * * * * AS CLOB (50M) * * * *) * * * *|| '</DESKTOP>' * FROM M * * *, LATERAL * * * *(SELECT XMLAGG( XMLFOREST(mac_address) ) AS mac_address * * * * * FROM T * * * * *WHERE T.id = M.id * * * *) AS T * * *, LATERAL * * * *(SELECT XMLAGG( XMLFOREST(sw_name) ) AS sw_name * * * * * FROM S * * * * *WHERE S.id = M.id * * * *) AS S ; or, if extra tags were allowed: SELECT XMLSERIALIZE( * * * * * XMLGROUP( * * * * * * *id , hostname * * * * * *, mac_addresses * * * * * *, sw_names * * * * * * *OPTION ROOT "DESKTOP" * * * * * ) * * * * * AS CLOB (1M) * * * *) * FROM M * * *, LATERAL * * * *(SELECT XMLAGG( XMLFOREST(mac_address) ) AS mac_addresses * * * * * FROM T * * * * *WHERE T.id = M.id * * * *) AS T * * *, LATERAL * * * *(SELECT XMLAGG( XMLFOREST(sw_name) ) AS sw_names * * * * * FROM T * * * * *WHERE S.id = M.id * * * *) AS S ; |
#9
| |||
| |||
|
|
| '</DESKTOP>' FROM M |
![]() |
| Thread Tools | |
| Display Modes | |
| |