Nicholas Campbell
Nicholas Campbell

Reputation: 13

XML Cross Apply Multiple Rows

Trying to get the following information using XML but struggling - could anyone assist? I need to get the repeating workparty info

i.e.

<pyWorkParty REPEATINGTYPE="PageGroup">
<rowdata REPEATINGINDEX="Underwriter">

I need this as one row with the next column being the name:

<pyFirstName>RANDOM</pyFirstName>

followed by the second repeating type being OrigUW and then third which is DATHandler

could anyone assist. ive had a go see below but wont work (i'm not really sure what Im doing as dont work with XMl data often)

SELECT
 t.TransID,
 --pyFullName.value('.','varchar(MAX)') as [Value],
 --pxPartyRole.value('.','varchar(MAX)') as [Value],
 --pyFullName.value('.','varchar(MAX)') as [Value],
 --t.TransXml,
 w.x.value('(pyWorkParty/RowData[@REPEATINGINDEX = "Underwriter"]/pyFullName/text())[1]', 'nvarchar(max)') as UndewrwriterName

FROM  #T t
CROSS APPLY TransXML.nodes('pagedata') as w(x)
<pagedata>
  <pyOrigUserWorkgroup>InternationalCasualty</pyOrigUserWorkgroup>
  <pxUpdateSystemID>pega</pxUpdateSystemID>
  <pzIndexCount>20</pzIndexCount>
  <pyResolvedOrgUnit>DelegatedAuthorities</pyResolvedOrgUnit>
  <pxUpdateDateTime>20220224T131425.174 GMT</pxUpdateDateTime>
  <pyResolvedTimestamp>20220224T131424.953 GMT</pyResolvedTimestamp>
  <pxApplication>DA</pxApplication>
  <pxCreateDateTime>20220208T160522.710 GMT</pxCreateDateTime>
  <pxUrgencyWork>0</pxUrgencyWork>
  <pyOrigOrgUnit>Casualty</pyOrigOrgUnit>
  <pxInsName>B-2511</pxInsName>
  <pyResolvedOrg>RANDONLondon</pyResolvedOrg>
  <pxSaveDateTime>20220224T131425.175 GMT</pxSaveDateTime>
  <pyResolvedUserWorkgroup>DelegatedAuthorities_DA</pyResolvedUserWorkgroup>
  <pxApplicationVersion>01.01.01</pxApplicationVersion>
  <pyHasAttachments>true</pyHasAttachments>
  <pzInsKey>RANDON-DA-WORK B-2511</pzInsKey>
  <pyOwnerOrgUnit>Casualty</pyOwnerOrgUnit>
  <pyOwnerOrg>RANDONLondon</pyOwnerOrg>
  <pyOrigUserID>OJakob</pyOrigUserID>
  <pyResolvedUserID>thill</pyResolvedUserID>
  <pxUpdateOpName>RANDOM(2) Hill</pxUpdateOpName>
  <pxUpdateCounter>38</pxUpdateCounter>
  <pxUpdateOperator>thill</pxUpdateOperator>
  <pxUpdateOrgUnit>DelegatedAuthorities</pxUpdateOrgUnit>
  <pyID>B-2511</pyID>
  <pyOwnerDivision>Underwriting</pyOwnerDivision>
  <pyStyle>pdf</pyStyle>
  <pyIsDataPageRefreshed>true</pyIsDataPageRefreshed>
  <pyWorkIDPrefix>B-</pyWorkIDPrefix>
  <pyOrigUserDivision>Underwriting</pyOrigUserDivision>
  <pyOrigDivision>Underwriting</pyOrigDivision>
  <pyResolvedTime>1372141.0</pyResolvedTime>
  <pyResolvedDivision>RiskAndCompliance</pyResolvedDivision>
  <pxObjClass>RANDON-DA-Work-Binder</pxObjClass>
  <pxCreateOperator>OJakob</pxCreateOperator>
  <pyOrigOrg>RANDONLondon</pyOrigOrg>
  <pyResolvedUserDivision>RiskAndCompliance</pyResolvedUserDivision>
  <pzIndexOwnerKey>RANDON-DA-WORK B-2511</pzIndexOwnerKey>
  <BinderSectionOBRef>22N44389AANR</BinderSectionOBRef>
  <pxCreateSystemID>pega</pxCreateSystemID>
  <pyLabel>INSURANCE COBROKERS INC</pyLabel>
  <pxCreateOpName>RANDOM Jakob</pxCreateOpName>
  <pzStatus>valid</pzStatus>
  <Queries REPEATINGTYPE="PageList" />
  <Compliance>
    <pxObjClass>RANDON-DA-Data-Compliance</pxObjClass>
  </Compliance>
  <CaseDetails>
    <ExpiryDate>20230228T000000.000 GMT</ExpiryDate>
    <BusinessType>New</BusinessType>
    <CreateDate>20220208</CreateDate>
    <Name>INSURANCE BROKERSBROKERS INC</Name>
    <pxObjClass>RANDON-DA-Data-CaseDetails</pxObjClass>
    <UniqRef>11511</UniqRef>
    <InceptionDate>20220301T000000.000 GMT</InceptionDate>
    <CaseStatus>Approved</CaseStatus>
    <TaskType>NB</TaskType>
    <TaskTypeLabel>New Binder</TaskTypeLabel>
    <AGReferenceID>2202AG11511BI</AGReferenceID>
    <AssignDate REPEATINGTYPE="PropertyGroup">
      <rowdata REPEATINGINDEX="UW">20220217</rowdata>
      <rowdata REPEATINGINDEX="DA">20220224</rowdata>
    </AssignDate>
    <AssignmentStatus REPEATINGTYPE="PropertyGroup">
      <rowdata REPEATINGINDEX="UW">New</rowdata>
      <rowdata REPEATINGINDEX="DA">Resolved</rowdata>
    </AssignmentStatus>
  </CaseDetails>
  <pyWorkParty REPEATINGTYPE="PageGroup">
    <rowdata REPEATINGINDEX="Underwriter">
      <pyFullName>RANDOM Jakob</pyFullName>
      <pyWorkPartyUri>OJakob</pyWorkPartyUri>
      <pxPartyRole>Underwriter</pxPartyRole>
      <pyUserName>RANDOM Jakob</pyUserName>
      <pxObjClass>Data-Party-Operator</pxObjClass>
      <pyFirstName>RANDOM</pyFirstName>
      <pyUserIdentifier>OJakob</pyUserIdentifier>
      <pyPartyLabel>Underwriter Handler</pyPartyLabel>
      <pzIndexOwnerKey>RANDON-DA-WORK B-2511</pzIndexOwnerKey>
      <pyLabel>RANDOM Jakob</pyLabel>
      <pxSubscript>Underwriter</pxSubscript>
      <pyLastName>Jakob</pyLastName>
      <pyWorkBasket>UWCasualty</pyWorkBasket>
      <pyEmail1>[email protected]</pyEmail1>
      <pzIndexes REPEATINGTYPE="PropertyGroup">
        <rowdata REPEATINGINDEX="PartyURI">1</rowdata>
      </pzIndexes>
    </rowdata>
    <rowdata REPEATINGINDEX="OrigUW">
      <pyFullName>RANDOM Jakob</pyFullName>
      <pyWorkPartyUri>OJakob</pyWorkPartyUri>
      <pxPartyRole>OrigUW</pxPartyRole>
      <pyUserName>RANDOM Jakob</pyUserName>
      <pxObjClass>Data-Party-Operator</pxObjClass>
      <pyFirstName>RANDOM</pyFirstName>
      <pyUserIdentifier>OJakob</pyUserIdentifier>
      <pyPartyLabel>Underwriter</pyPartyLabel>
      <pzIndexOwnerKey>RANDON-DA-WORK B-2511</pzIndexOwnerKey>
      <pyLabel>RANDOM Jakob</pyLabel>
      <pxSubscript>OrigUW</pxSubscript>
      <pyLastName>Jakob</pyLastName>
      <pyWorkBasket>UWCasualty</pyWorkBasket>
      <pyEmail1>[email protected]</pyEmail1>
      <pzIndexes REPEATINGTYPE="PropertyGroup">
        <rowdata REPEATINGINDEX="PartyURI">2</rowdata>
      </pzIndexes>
    </rowdata>
    <rowdata REPEATINGINDEX="DATHandler">
      <pyFullName>RANDOM(2) Hill</pyFullName>
      <pyWorkPartyUri>thill</pyWorkPartyUri>
      <pxPartyRole>DATHandler</pxPartyRole>
      <pyUserName>RANDOM(2) Hill</pyUserName>
      <pxObjClass>Data-Party-Operator</pxObjClass>
      <pyFirstName>RANDOM(2)</pyFirstName>
      <pyUserIdentifier>thill</pyUserIdentifier>
      <pyPartyLabel>DAT Handler</pyPartyLabel>
      <pzIndexOwnerKey>RANDON-DA-WORK B-2511</pzIndexOwnerKey>
      <pyLabel>RANDOM(2) Hill</pyLabel>
      <pxSubscript>DATHandler</pxSubscript>
      <pyLastName>Hill</pyLastName>
      <pyWorkBasket>DelegatedAuthorities_DA</pyWorkBasket>
      <pyEmail1>[email protected]</pyEmail1>
      <pzIndexes REPEATINGTYPE="PropertyGroup">
        <rowdata REPEATINGINDEX="PartyURI">19</rowdata>
      </pzIndexes>
    </rowdata>
  </pyWorkParty>
</pagedata>

Upvotes: 0

Views: 616

Answers (2)

AlwaysLearning
AlwaysLearning

Reputation: 8819

It's not altogether clear from your question what your expected results are.

From the example result it seems that you're wanting the XML of the required elements, such as via:

SELECT
  t.TransID,
  pyWorkParty.query(N'(rowdata[@REPEATINGINDEX="Underwriter"]/pyFullName)[1]') as UndewrwriterName,
  pyWorkParty.query(N'(rowdata[@REPEATINGINDEX="OrigUW"]/pyFullName)[1]') as OriginalUnderwriter,
  pyWorkParty.query(N'(rowdata[@REPEATINGINDEX="DATHandler"]/pyFullName)[1]') as DelegatedAuthorityTeam
FROM  #T t
CROSS APPLY TransXML.nodes('pagedata/pyWorkParty[@REPEATINGTYPE="PageGroup"]') as pagedata(pyWorkParty);

But from the attempted SQL query it seems like you're wanting the text contents of those elements, such as via:

SELECT
  t.TransID,
  pyWorkParty.value(N'(rowdata[@REPEATINGINDEX="Underwriter"]/pyFullName/text())[1]', N'nvarchar(max)') as UndewrwriterName,
  pyWorkParty.value(N'(rowdata[@REPEATINGINDEX="OrigUW"]/pyFullName/text())[1]', N'nvarchar(max)') as OriginalUnderwriter,
  pyWorkParty.value(N'(rowdata[@REPEATINGINDEX="DATHandler"]/pyFullName/text())[1]', N'nvarchar(max)') as DelegatedAuthorityTeam
FROM  #T t
CROSS APPLY TransXML.nodes('pagedata/pyWorkParty[@REPEATINGTYPE="PageGroup"]') as pagedata(pyWorkParty);

Upvotes: 2

yoma
yoma

Reputation: 369

Try this code:

select  G.n.value('./@REPEATINGTYPE', 'nvarchar(50)') as RType
,       A.n.value('./@REPEATINGINDEX', 'nvarchar(50)') as RIndex
,       A.n.value('pyUserName[1]', 'nvarchar(50)') as UserName
from @xmltbl t
cross apply [data].nodes('pagedata/pyWorkParty') G(n)
cross apply g.n.nodes('rowdata') A(n)

If it doesn't bring you what you want, please, provide some sample table with desired result, because from your question it isn't very clear.

Upvotes: 0

Related Questions