Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 27th, 2012  |  syntax: None  |  size: 1.78 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. SELECT returning multiple rows as string
  2. contractid | contract name
  3. "1" | "MAG:001"
  4. "2" | "MAG:002"
  5.        
  6. devid | serialnum | fk_contractid
  7. 10 | 1234 | 1
  8. 11 | 5678 | 1
  9. 12 | 4321 | 2
  10. 13 | 8765 | 2
  11.        
  12. "MAG:001" | 1234, 5678
  13. "MAG:002" | 4321, 8765
  14.        
  15. select    CONTRACT_NAME
  16.          || '|'
  17.          || LISTAGG(D.SERIALNUM, ',') within group (order by CONTRACTID)
  18.     from CONTRACTS C join DEVICES D on D.FK_CONTRACTID = C.CONTRACTID
  19. group by CONTRACT_NAME
  20.        
  21. SELECT Contracts.contract_name
  22.      , WMSYS.WM_CONCAT(Devices.serialnum)
  23.   FROM Contracts, Devices
  24.  WHERE Contracts.contractid = Devices.fk_contractid
  25.  GROUP BY Contracts.contract_name;
  26.        
  27. FUNCTION concat_serialnum(the_contract Contracts.contractid%TYPE)
  28.  RETURN VARCHAR2
  29. IS
  30.   return_value VARCHAR2(4000);
  31.   CURSOR serials_cur IS
  32.     SELECT serialnum
  33.       FROM Devices
  34.       WHERE contractid = the_contract
  35.       ORDER BY serialnum;
  36. BEGIN
  37.   FOR serials_rec IN serials_cur LOOP
  38.     return_value := return_value || ', ' || serials_rec.serialnum;
  39.   END LOOP;
  40.   RETURN LTRIM(return_value, ', ');
  41. END concat_serialnum;
  42.        
  43. SELECT contract_name
  44.      , concat_serialnum(contractid)
  45.   from Contracts;
  46.        
  47. SELECT '"' || c.contract_name || '"'
  48. ...
  49. FROM contracts c INNER JOIN devices d ON d.fk_contractid = c.contractid
  50.        
  51. select contract_name,
  52.        cast(xmltransform(xmlelement("a",
  53.                                     xmlagg(xmlelement("serialNum", serialnum))),
  54.                          xmltype('<?xml version="1.0" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><xsl:for-each select="//serialNum"><xsl:value-of select="."/>, </xsl:for-each></xsl:template></xsl:stylesheet>')) as
  55.             varchar2(4000)) as serialnums
  56.   from contracts, devices
  57.  where contractId = fk_contractid
  58.  group by contract_name