sql >> Database >  >> RDS >> PostgreSQL

Naam van XML-element uit gegevens in Postgres

Het is niet mogelijk om een ​​SQL/XML-functie te gebruiken met dynamische tagnaam. U kunt een format . gebruiken functie.

postgres=# SELECT * FROM foo;
┌──────┬──────┐
│  nm  │ val  │
╞══════╪══════╡
│ buy  │  100 │
│ sell │ 1000 │
│ buy  │  102 │
│ sell │ 1033 │
└──────┴──────┘
(4 rows)

postgres=# SELECT xmlelement(name "trades", xmlagg(x)) 
              FROM (SELECT format('<%1$s>%2$s</%1$s>', 
                                   nm, 
                                   xmlagg(xmlelement(name value, val)))::xml x 
                        FROM foo group by nm) s;
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                    xmlelement                                                       │
╞═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
│ <trades><sell><value>1000</value><value>1033</value></sell><buy><value>100</value><value>102</value></buy></trades> │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
(1 row)



  1. MySQL select statement met CASE of IF ELSEIF? Weet niet hoe je het resultaat krijgt

  2. Kan een INNER JOIN betere prestaties bieden dan BESTAAT?

  3. Hoe automatisch te verhogen in PostgreSQL?

  4. Schik duplicaten en nummer de records in een volgorde - MySQL