[xsl] Is conditional group-by possible?

Subject: [xsl] Is conditional group-by possible?
From: "Jim Neff" <jneff@xxxxxxxxxxxxxxx>
Date: Tue, 25 Jan 2005 10:51:31 -0500
Greetings,

Is a conditional group-by possible?

Here is what I tried:

<xsl:for-each-group 
     select="Table" 
     group-by="(if ((FED_ID_FLAG = 'F') 
     and (not(FED_ID = ''))) 
     then FED_ID 
     else SOC_SEC_ID)">

And I get nothing in my output.

My input looks like simliar to this :

<NewDataSet>
  <Table>    
    <PROV_SOC_SEC_ID>111104550</PROV_SOC_SEC_ID>    
    <PLOS_FED_ID_FLAG>S</PLOS_FED_ID_FLAG>
    <PLOS_FED_ID>190404550</PLOS_FED_ID>
    <PATIENT_LAST_NAME>Doe</PATIENT_LAST_NAME>
    <PATIENT_FIRST_NAME>John</PATIENT_FIRST_NAME>    
  </Table>
  <Table>    
    <PROV_SOC_SEC_ID>111104550</PROV_SOC_SEC_ID>
    <PLOS_FED_ID_FLAG>S</PLOS_FED_ID_FLAG>
    <PLOS_FED_ID>190404550</PLOS_FED_ID>
    <PATIENT_LAST_NAME>Doe</PATIENT_LAST_NAME>
    <PATIENT_FIRST_NAME>Jane</PATIENT_FIRST_NAME>    
  </Table>
  <Table>    
    <PROV_SOC_SEC_ID>777104550</PROV_SOC_SEC_ID>
    <PLOS_FED_ID_FLAG>F</PLOS_FED_ID_FLAG>
    <PLOS_FED_ID>880121550</PLOS_FED_ID>
    <PATIENT_LAST_NAME>Smith</PATIENT_LAST_NAME>
    <PATIENT_FIRST_NAME>Mary</PATIENT_FIRST_NAME>    
  </Table>
</NewDataSet>

This should result in two groups, one 111104550, the other 880121550.

What I want is to use the FED_ID element to group by if the FED_ID_FLAG =
'F' and FED_ID is an empty string.  Otherwise I want to use the SOC_SEC_ID
element to group.

Thanks in advance,
Jim Neff

Current Thread