UFN_PDCOMPOSITESEGMENTENTRIES_TOITEMLISTXML

UFN_PDCOMPOSITESEGMENTENTRIES_TOITEMLISTXML

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@PDACCOUNTSTRUCTUREID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_PDCOMPOSITESEGMENTENTRIES_TOITEMLISTXML(
  @PDACCOUNTSTRUCTUREID uniqueidentifier
)
returns xml
with execute as caller
as begin
  return (

    -- This is the poor man's pivot, I have to do this since I need to pivot two columns and the statement only supports one.

    -- This is faster than two pivots that are then joined together in case you were wondering.  

      select
            CSM.ID 
            ,max( case when CSTL.SEQUENCE = 1 then CSME.LONGDESCRIPTIONID end ) as ID1
            ,max( case when CSTL.SEQUENCE = 1 then CSMV.LONGDESCRIPTION end ) as LD1
            ,max( case when CSTL.SEQUENCE = 2 then CSME.LONGDESCRIPTIONID end ) as ID2
            ,max( case when CSTL.SEQUENCE = 2 then CSMV.LONGDESCRIPTION end ) as LD2
            ,max( case when CSTL.SEQUENCE = 3 then CSME.LONGDESCRIPTIONID end ) as ID3
            ,max( case when CSTL.SEQUENCE = 3 then CSMV.LONGDESCRIPTION end ) as LD3
            ,max( case when CSTL.SEQUENCE = 4 then CSME.LONGDESCRIPTIONID end ) as ID4
            ,max( case when CSTL.SEQUENCE = 4 then CSMV.LONGDESCRIPTION end ) as LD4
            ,CSM.NAME
            ,CSM.PDACCOUNTSEGMENTVALUEID as SEGMENTID
        from
            dbo.PDCOMPOSITESEGMENTMAPPING AS CSM
            inner join dbo.PDCOMPOSITESEGMENTMAPPINGENTRY as CSME
                on CSM.ID = CSME.PDCOMPOSITESEGMENTMAPPINGID
            inner join dbo.PDCOMPOSITESEGMENTTABLELIST as CSTL
                on CSTL.ID = CSME.PDCOMPOSITESEGMENTTABLELISTID
            inner join dbo.PDCOMPOSITESEGMENTMAPPINGVIEW as CSMV
                on CSMV.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = CSTL.PDACCOUNTTABLESAVAILABLEFORSEGMENTID
                and CSMV.LONGDESCRIPTIONID = CSME.LONGDESCRIPTIONID
        where
            CSM.PDACCOUNTSTRUCTUREID = @PDACCOUNTSTRUCTUREID
        group by CSM.ID, name, PDACCOUNTSEGMENTVALUEID
        order by CSM.NAME
for xml raw('ITEM'),type,elements,root('MAPPINGS'),BINARY BASE64

  );  
end