sql >> Databáze >  >> RDS >> Sqlserver

Jak vrátit XML ze serveru SQL Server 2008, který je strukturovaný s více výběry sdílejícími společného nadřazeného prvku

Zkuste něco takového - používá FOR XML PATH a podvýběry pro vytvoření „propojených“ poduzlů pro daného zákazníka (Omezil jsem to na dvě podtabulky – měli byste však získat „podstatu“ toho a být schopni jej rozšířit na libovolný počet propojených podtabulek ):

SELECT
    CustomerID AS '@CustomerID',
    CustName AS '@Name',

    (SELECT ProductName AS '@productname'
     FROM dbo.Products p
     WHERE p.CustomerID = c.CustomerID  
     FOR XML PATH('Product'), TYPE) AS 'Products',

    (SELECT HobbyName AS '@hobbyname'
     FROM dbo.Hobbies h 
     WHERE h.CUstomerID = c.CustomerID
     FOR XML PATH('Hobby'), TYPE) AS 'Hobbies'
FROM
    dbo.Customers c
FOR XML PATH('Customer'), ROOT('Customers')

Dává mi výstup něco jako:

<Customers>
  <Customer CustomerID="1" Name="Fred">
    <Products>
      <Product productname="Table" />
      <Product productname="Wardrobe" />
      <Product productname="Chair" />
    </Products>
    <Hobbies>
      <Hobby hobbyname="Golf" />
      <Hobby hobbyname="Swimming" />
    </Hobbies>
  </Customer>
  <Customer CustomerID="2" Name="Sue">
    <Products>
      <Product productname="CD Player" />
      <Product productname="Picture frame" />
    </Products>
    <Hobbies>
      <Hobby hobbyname="Dancing" />
      <Hobby hobbyname="Gardening" />
      <Hobby hobbyname="Reading" />
    </Hobbies>
  </Customer>
</Customers>


  1. Mapování EnumSet na mysql Set pomocí JPA 2.1

  2. Zkontrolujte, zda je pole číselné, a poté proveďte srovnání pouze na těchto polích v jednom příkazu?

  3. Instalace PostGIS Homebrew odkazující na starou cestu?

  4. MySQL ekvivalent modulu dblink PostgreSQL?