RE: [xsl] Is conditional group-by possible?

Subject: RE: [xsl] Is conditional group-by possible?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 25 Jan 2005 16:01:58 -0000
Yes, conditional grouping is possible, but the element names in your
stylesheet have to match those in your source document.

Michael Kay
http://www.saxonica.com/ 

> -----Original Message-----
> From: Jim Neff [mailto:jneff@xxxxxxxxxxxxxxx] 
> Sent: 25 January 2005 15:52
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Is conditional group-by possible?
> 
> 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