FOR XML EXPLICIT

  • I need to create an xml document from relational data.  Using FOR XML EXPLICIT I can get it to two levels, but can't seem to get the third child to work correctly.  The three tables are:

    tblcompanylist, tblgroup, and tblselections.

    The xml doc should look like this:

    <Company Name="AAA Company">

    <Group Name="1" State="First Set of Exit Options "/>

    <Selection Name="Selection That Saves"/>

    <Selection Name="Data Report"/>

    <Selection Name="Guidance Report"/>

    <Selection Name="URL"/>

    <Group Name="1" State="Groupitty Duppitty"/>

    <Selection Name="Informational Panel"/>

    <Selection Name="Some selection name"/>

    <Group Name="1" State="Third Group">

    <Selection Name="Log Report"/>

    <Selection Name="Save Selection"/>

    <Selection Name="Selection 1"/>

    <Selection Name="Selection 2"/>

    </Group>

    </Company>

    But I can only get it to look like this:

    <Company Name="AAA Company">

    <Group Name="1" State="First Set of Exit Options "/>

    <Group Name="1" State="Groupitty Duppitty"/>

    <Group Name="1" State="Third Group">

    <Selection Name="Selection That Saves"/>

    <Selection Name="Data Report"/>

    <Selection Name="Guidance Report"/>

    <Selection Name="URL"/>

    <Selection Name="Informational Panel"/>

    <Selection Name="Text for the selection"/>

    <Selection Name="Guidance Report"/>

    <Selection Name="Save Selection"/>

    <Selection Name="Selection 1"/>

    <Selection Name="Selection 2"/>

    </Group>

    </Company>

    The selection child node should be a child of the group (as group is a child of Company),

    but it seems to only be getting listed as a child of Company.  Can anyone tell what I'm doing wrong?

    The query I'm using is:

    SELECT 1 as Tag, NULL as Parent,

     A.fldcompanyname as [Company!1!Name],

     NULL  as [Group!2!Name], 

     NULL  as [Group!2!State],

     NULL  as [Selection!3!Name]

    FROM tblcompanylist as A

    UNION ALL

    Select 2, 1,

     A.fldcompanyname,

     B.fldGroupState, 

     B.fldgrouptext,

     NULL

    from  tblcompanylist as A, tblgroup as B

    where A.fldcompanyid = B.fldcompanyid

    UNION ALL

    Select 3, 2,

     A.fldcompanyname,

     --NULL,

     --NULL,

     B.fldGroupState, 

     B.fldgrouptext,

     c.fldSelectionText

    from tblcompanylist as A, tblgroup as B, tblselections as C

    where  A.fldcompanyid = B.fldcompanyid and B.fldgroupid = C.fldgroupid

    ORDER BY [Company!1!Name]        

    FOR XML EXPLICIT

     

    Thanks for any advice offered!

  •   So near, but yet so far away

      The only thing you need to do to get your statement working is to extend the ORDER BY to include the fields that separate the node levels:

    Change:

    ORDER BY [Company!1!Name]  

    To:

    ORDER BY [Company!1!Name] , [Group!2!Name],  [Group!2!State]

    -Eddie

    Eddie Wuerch
    MCM: SQL

  • Thanks, that got it to work exactly! (although I did have to replace the last order by element with [Selection!3!Name] instead of  [Group!2!State] ) but that was obvious from what you had said.

     

    Again, thanks.

Viewing 3 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply