Permite girar una matriz de datos, es decir, dado un conjunto de registros, retorna una matriz agrupando los valores por las columnas de ruptura indicados, pasando el valor de cada registro a una columna del agrupado. La matriz inicial de datos puede ser construida a partir de un vtable o de un select a base de datos.

1 vtable.pivot

Añade registros a una tabla virtual.

<vtable.pivot
    name='name'
    pivotcolumns='pivotcolumns'
    datacolumns='datacolumns'
    datalabels='datalabels'
    measures-in-rows='measures-in-rows'
    group-measures='group-measures'
    clear-group='clear-group'
    prefix='prefix'
    pivotsort='pivotsort'
>
    <var /> ?
</vtable.pivot>

Exceptions

traspose requires correlative columns in select

Las columnas de ruptura deben ser las primeras del cursor.

Remarks

Cuando un valor de agrupación se repite y el valor para la columna es numérico,el resultado es la suma de los valores de cada registro para la misma entrada de agrupación.

Example

Rotación de una matriz por la columna product y cogiendo como valor numérico el valor de la columna units.

Copy
<xsql-script name='vtable_pivot'>
    <body>

        <vtable name='v'>
            <column name='region' type='char' />
            <column name='product' type='char' />
            <column name='units' type='decimal' />
        </vtable>
        <vtable.insert name='v'>
            <string>USA</string>
            <string>NIKE</string>
            <string>10</string>
        </vtable.insert>
        <vtable.insert name='v'>
            <string>USA</string>
            <string>PUMA</string>
            <string>20</string>
        </vtable.insert>
        <vtable.insert name='v'>
            <string>USA</string>
            <string>PUMA</string>
            <string>50</string>
        </vtable.insert>
        <vtable.insert name='v'>
            <string>USA</string>
            <string>REEBOK</string>
            <string>15</string>
        </vtable.insert>
        <vtable.insert name='v'>
            <string>EUROPE</string>
            <string>NIKE</string>
            <string>12</string>
        </vtable.insert>
        <vtable.insert name='v'>
            <string>EUROPE</string>
            <string>PUMA</string>
            <string>15</string>
        </vtable.insert>
        <vtable.insert name='v'>
            <string>EUROPE</string>
            <string>REEBOK</string>
            <string>22</string>
        </vtable.insert>

        <println>
            <v />
        </println>

        <!--
        Result:
            +======+=======+=====+
            |region|product|units|
            +======+=======+=====+
            |USA   |NIKE   |   10|
            |USA   |PUMA   |   20|
            |USA   |PUMA   |   50|
            |USA   |REEBOK |   15|
            |EUROPE|NIKE   |   12|
            |EUROPE|PUMA   |   15|
            |EUROPE|REEBOK |   22|
            +======+=======+=====+
        -->

        <println>
            <vtable.pivot name='v' pivotcolumns='product' datacolumns='units' />
        </println>

        <!--
        Result:
            +========+=======+====+====+======+
            |measures|country|nike|puma|reebok|
            +========+=======+====+====+======+
            |units   |USA    |  10|  70|    15|
            |units   |EUROPE |  12|  15|    22|
            +========+=======+====+====+======+
        -->
    </body>
</xsql-script>
Example

Rotación de una matriz de datos creando tantas columnas como combinaciones de valores diferentes haya en la columnas country, state conteniendo el valor de la columna units.

Copy
<xsql-script name='vtable_pivot'>
   <body>
       <vtable name='v'>
           <column name='region'   type='char' />
           <column name='state'    type='char' />
           <column name='product' type='char' />
           <column name='units'    type='decimal' />
       </vtable>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>OR</string>
           <string>NIKE</string>
           <string>10</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>MI</string>
           <string>NIKE</string>
           <string>12</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>AR</string>
           <string>PUMA</string>
           <string>20</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>OR</string>
           <string>PUMA</string>
           <string>50</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>OR</string>
           <string>REEBOK</string>
           <string>15</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>EUROPE</string>
           <string>UK</string>
           <string>NIKE</string>
           <string>12</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>EUROPE</string>
           <string>UK</string>
           <string>PUMA</string>
           <string>20</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>EUROPE</string>
           <string>DE</string>
           <string>PUMA</string>
           <string>15</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>EUROPE</string>
           <string>DE</string>
           <string>REEBOK</string>
           <string>22</string>
       </vtable.insert>

       <println>
           <v />
       </println>

       <!--
       Result:
          +=======+=====+=======+=====+
          |country|state|product|units|
          +=======+=====+=======+=====+
          |USA    |OR   |NIKE   |   10|
          |USA    |MI   |NIKE   |   12|
          |USA    |AR   |PUMA   |   20|
          |USA    |OR   |PUMA   |   50|
          |USA    |OR   |REEBOK |   15|
          |EUROPE |UK   |NIKE   |   12|
          |EUROPE |UK   |PUMA   |   20|
          |EUROPE |DE   |PUMA   |   15|
          |EUROPE |DE   |REEBOK |   22|
          +=======+=====+=======+=====+
       -->

       <println>
           <vtable.sort columns='product'>
               <vtable.pivot name='v' pivotcolumns='region, state' pivotsort='country' datacolumns='units' />
           </vtable.sort>
       </println>

       <!--
       Result:
           +========+=======+======+======+======+=========+=========+
           |measures|product|usa   |usa   |usa   |europe   |europe   |
           |        |       |or    |mi    |ar    |uk       |de       |
           +========+=======+======+======+======+=========+=========+
           |units   |NIKE   |    10|    12|      |       12|         |
           |units   |PUMA   |    50|      |    20|       20|       15|
           |units   |REEBOK |    15|      |      |         |       22|
           +========+=======+======+======+======+=========+=========+
       -->
   </body>
</xsql-script>
Example

Rotación de una matriz de datos por el campo store_country, mostrando los valores numéricos de grocery_sqft y store_sqft.

Copy
<xsql-script name='vtable_pivot'>
   <body>
       <vtable name='v'>
           <column name='store_country'    type='char' />
           <column name='store_state'      type='char' />
           <column name='store_type'       type='char' />
           <column name='grocery_sqft'     type='decimal' />
           <column name='store_sqft'       type='decimal' />
       </vtable>
       <vtable.insert name='v'>
           <string>Canada</string><string>BC</string>
           <string>Mid-SizeGrocery</string>
           <string>27463</string>
           <string>34452</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>DF</string>
           <string>DeluxeSupermarket</string>
           <null />
           <null />
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>DF</string>
           <string>Mid-SizeGrocery</string>
           <string>22450</string>
           <string>36509</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Guerrero</string>
           <string>Supermarket</string>
           <string>17475</string>
           <string>23593</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Jalisco</string>
           <string>SmallGrocery</string>
           <string>15012</string>
           <string>24597</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Veracruz</string>
           <string>Supermarket</string>
           <string>26354</string>
           <string>34791</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Yucatan</string>
           <string>DeluxeSupermarket</string>
           <string>20141</string>
           <string>30797</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Zacatecas</string>
           <string>DeluxeSupermarket</string>
           <string>21938</string>
           <string>30584</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Zacatecas</string>
           <string>GourmetSupermarket</string>
           <string>16844</string>
           <string>23759</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Zacatecas</string>
           <string>Mid-SizeGrocery</string>
           <string>30351</string>
           <string>38382</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>GourmetSupermarket</string>
           <string>15337</string>
           <string>23688</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>HeadQuarters</string>
           <null />
           <null />
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>SmallGrocery</string>
           <string>15321</string>
           <string>22478</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>Supermarket</string>
           <string>14210</string>
           <string>23598</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>OR</string>
           <string>DeluxeSupermarket</string>
           <string>18670</string>
           <string>27694</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>OR</string>
           <string>Supermarket</string>
           <string>16232</string>
           <string>20319</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>DeluxeSupermarket</string>
           <string>22123</string>
           <string>33858</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>Mid-SizeGrocery</string>
           <null />
           <null />
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>SmallGrocery</string>
           <string>22271</string>
           <string>28206</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>Supermarket</string>
           <string>59758</string>
           <string>91179</string>
       </vtable.insert>
       <println>
           <v />
       </println>

       <!--
       Result:
         +=============+===========+===================+============+==========+
         |store_country|store_state|store_type         |grocery_sqft|store_sqft|
         +=============+===========+===================+============+==========+
         |Canada       |BC         |Deluxe Supermarket |       16418|     23112|
         |Canada       |BC         |Mid-Size Grocery   |       27463|     34452|
         |Mexico       |DF         |Deluxe Supermarket |            |          |
         |Mexico       |DF         |Mid-Size Grocery   |       22450|     36509|
         |Mexico       |Guerrero   |Supermarket        |       17475|     23593|
         |Mexico       |Jalisco    |Small Grocery      |       15012|     24597|
         |Mexico       |Veracruz   |Supermarket        |       26354|     34791|
         |Mexico       |Yucatan    |Deluxe Supermarket |       20141|     30797|
         |Mexico       |Zacatecas  |Deluxe Supermarket |       21938|     30584|
         |Mexico       |Zacatecas  |Gourmet Supermarket|       16844|     23759|
         |Mexico       |Zacatecas  |Mid-Size Grocery   |       30351|     38382|
         |USA          |CA         |Gourmet Supermarket|       15337|     23688|
         |USA          |CA         |HeadQuarters       |            |          |
         |USA          |CA         |Small Grocery      |       15321|     22478|
         |USA          |CA         |Supermarket        |       14210|     23598|
         |USA          |OR         |Deluxe Supermarket |       18670|     27694|
         |USA          |OR         |Supermarket        |       16232|     20319|
         |USA          |WA         |Deluxe Supermarket |       22123|     33858|
         |USA          |WA         |Mid-Size Grocery   |            |          |
         |USA          |WA         |Small Grocery      |       22271|     28206|
         |USA          |WA         |Supermarket        |       59758|     91179|
         +=============+===========+===================+============+==========+
       -->

       <println>
           <vtable.pivot name='v' pivotcolumns='store_country' datacolumns='grocery_sqft,store_sqft' />
       </println>

       <!--
           Result:

           +============+===========+==================+======+======+=====+
           |measures    |store_state|store_type        |canada|mexico|usa  |
           +============+===========+==================+======+======+=====+
           |grocery_sqft|BC         |Mid=SizeGrocery   | 27463|      |     |
           |grocery_sqft|DF         |DeluxeSupermarket |      |      |     |
           |grocery_sqft|DF         |Mid=SizeGrocery   |      | 22450|     |
           |grocery_sqft|Guerrero   |Supermarket       |      | 17475|     |
           |grocery_sqft|Jalisco    |SmallGrocery      |      | 15012|     |
           |grocery_sqft|Veracruz   |Supermarket       |      | 26354|     |
           |grocery_sqft|Yucatan    |DeluxeSupermarket |      | 20141|     |
           |grocery_sqft|Zacatecas  |DeluxeSupermarket |      | 21938|     |
           |grocery_sqft|Zacatecas  |GourmetSupermarket|      | 16844|     |
           |grocery_sqft|Zacatecas  |Mid=SizeGrocery   |      | 30351|     |
           |grocery_sqft|CA         |GourmetSupermarket|      |      |15337|
           |grocery_sqft|CA         |HeadQuarters      |      |      |     |
           |grocery_sqft|CA         |SmallGrocery      |      |      |15321|
           |grocery_sqft|CA         |Supermarket       |      |      |14210|
           |grocery_sqft|OR         |DeluxeSupermarket |      |      |18670|
           |grocery_sqft|OR         |Supermarket       |      |      |16232|
           |grocery_sqft|WA         |DeluxeSupermarket |      |      |22123|
           |grocery_sqft|WA         |Mid=SizeGrocery   |      |      |     |
           |grocery_sqft|WA         |SmallGrocery      |      |      |22271|
           |grocery_sqft|WA         |Supermarket       |      |      |59758|
           |store_sqft  |BC         |Mid=SizeGrocery   | 34452|      |     |
           |store_sqft  |DF         |DeluxeSupermarket |      |      |     |
           |store_sqft  |DF         |Mid=SizeGrocery   |      | 36509|     |
           |store_sqft  |Guerrero   |Supermarket       |      | 23593|     |
           |store_sqft  |Jalisco    |SmallGrocery      |      | 24597|     |
           |store_sqft  |Veracruz   |Supermarket       |      | 34791|     |
           |store_sqft  |Yucatan    |DeluxeSupermarket |      | 30797|     |
           |store_sqft  |Zacatecas  |DeluxeSupermarket |      | 30584|     |
           |store_sqft  |Zacatecas  |GourmetSupermarket|      | 23759|     |
           |store_sqft  |Zacatecas  |Mid=SizeGrocery   |      | 38382|     |
           |store_sqft  |CA         |GourmetSupermarket|      |      |23688|
           |store_sqft  |CA         |HeadQuarters      |      |      |     |
           |store_sqft  |CA         |SmallGrocery      |      |      |22478|
           |store_sqft  |CA         |Supermarket       |      |      |23598|
           |store_sqft  |OR         |DeluxeSupermarket |      |      |27694|
           |store_sqft  |OR         |Supermarket       |      |      |20319|
           |store_sqft  |WA         |DeluxeSupermarket |      |      |33858|
           |store_sqft  |WA         |Mid=SizeGrocery   |      |      |     |
           |store_sqft  |WA         |SmallGrocery      |      |      |28206|
           |store_sqft  |WA         |Supermarket       |      |      |91179|
           +============+===========+==================+======+======+=====+
   -->

   </body>

</xsql-script>
Example

Rotación de una matriz de datos ordenados por la columna date de forma ascendente y descendente.

Copy
<xsql-script name='vtable_pivot_sort'>
  <body>

     <vtable name='v2'>
        <column name='region' type='char' />
        <column name='product' type='char' />
        <column name='sales' type='decimal' />
        <column name='date' type='date' />
     </vtable>
     <vtable.insert name='v2'>
        <matrix date-format='dd-MM-yyyy'>
           {"USA ","NIKE ", "12", "01-01-2012" }
           {"USA ","PUMA ", "20", "03-01-2012"}
           {"USA ","PUMA ", "50", "04-01-2012"}
           {"CAN ","REEBOK ", "15", "05-01-2012"}
           {"MEX ","REEBOK ", "15", "02-01-2012"}
        </matrix>
     </vtable.insert>

     <println><v2/></println>
     <!-- Result
     +------+-------+-------+----------+
     |region|product|sales  |date      |
     |char  |char   |decimal|date      |
     +------+-------+-------+----------+
     |USA   |NIKE   |     12|01-01-2012|
     |USA   |PUMA   |     20|03-01-2012|
     |USA   |PUMA   |     50|04-01-2012|
     |CAN   |REEBOK |     15|05-01-2012|
     |MEX   |REEBOK |     15|02-01-2012|
     +------+-------+-------+----------+
     -->

     <println><vtable.pivot name='v2' pivotcolumns='date' pivotsort='date' datacolumns='sales' /></println>

     <!-- Result
     +------+-------+----------+----------+----------+----------+----------+
     |region|product|pivot1    |pivot5    |pivot2    |pivot3    |pivot4    |
     |char  |char   |decimal   |decimal   |decimal   |decimal   |decimal   |
     |<null>|<null> |sales     |sales     |sales     |sales     |sales     |
     |      |       |01-01-2012|02-01-2012|03-01-2012|04-01-2012|05-01-2012|
     +------+-------+----------+----------+----------+----------+----------+
     |USA   |NIKE   |        12|          |          |          |          |
     |      |PUMA   |          |          |        20|        50|          |
     |CAN   |REEBOK |          |          |          |          |        15|
     |MEX   |       |          |        15|          |          |          |
     +------+-------+----------+----------+----------+----------+----------+
     -->

     <println><vtable.pivot name='v2' pivotcolumns='date' pivotsort='date desc' datacolumns='sales' /></println>

     <!-- Result
     +------+-------+----------+----------+----------+----------+----------+
     |region|product|pivot4    |pivot3    |pivot2    |pivot5    |pivot1    |
     |char  |char   |decimal   |decimal   |decimal   |decimal   |decimal   |
     |<null>|<null> |sales     |sales     |sales     |sales     |sales     |
     |      |       |05-01-2012|04-01-2012|03-01-2012|02-01-2012|01-01-2012|
     +------+-------+----------+----------+----------+----------+----------+
     |USA   |NIKE   |          |          |          |          |        12|
     |      |PUMA   |          |        50|        20|          |          |
     |CAN   |REEBOK |        15|          |          |          |          |
     |MEX   |       |          |          |          |        15|          |
     +------+-------+----------+----------+----------+----------+----------+

     -->

  </body>

</xsql-script>

1.1 datalabels

Use datalabels to show the defined label instead of column names.

Example
Copy
<xsql-script name='vtable_pivot'>
   <body>
       <vtable name='v'>
           <column name='store_country'    type='char' />
           <column name='store_state'      type='char' />
           <column name='store_type'       type='char' />
           <column name='grocery_sqft'     type='decimal' />
           <column name='store_sqft'       type='decimal' />
       </vtable>
       <vtable.insert name='v'>
           <string>Canada</string>
           <string>BC</string>
           <string>Mid-SizeGrocery</string>
           <number>27463</number>
           <number>34452</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>DF</string>
           <string>DeluxeSupermarket</string>
           <number>0</number>
           <number>0</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>DF</string>
           <string>Mid-SizeGrocery</string>
           <number>22450</number>
           <number>36509</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Guerrero</string>
           <string>Supermarket</string>
           <number>17475</number>
           <number>23593</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Jalisco</string>
           <string>SmallGrocery</string>
           <number>15012</number>
           <number>24597</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Veracruz</string>
           <string>Supermarket</string>
           <number>26354</number>
           <number>34791</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Yucatan</string>
           <string>DeluxeSupermarket</string>
           <number>20141</number>
           <number>30797</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Zacatecas</string>
           <string>DeluxeSupermarket</string>
           <number>21938</number>
           <number>30584</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Zacatecas</string>
           <string>GourmetSupermarket</string>
           <number>16844</number>
           <number>23759</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>Mexico</string>
           <string>Zacatecas</string>
           <string>Mid-SizeGrocery</string>
           <number>30351</number>
           <number>38382</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>GourmetSupermarket</string>
           <number>15337</number>
           <number>23688</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>HeadQuarters</string>
           <number>0</number>
           <number>0</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>SmallGrocery</string>
           <number>15321</number>
           <number>22478</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>CA</string>
           <string>Supermarket</string>
           <number>14210</number>
           <number>23598</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>OR</string>
           <string>DeluxeSupermarket</string>
           <string>18670</string>
           <string>27694</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>OR</string>
           <string>Supermarket</string>
           <string>16232</string>
           <string>20319</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>DeluxeSupermarket</string>
           <string>22123</string>
           <string>33858</string>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>Mid-SizeGrocery</string>
           <number>0</number>
           <number>0</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>SmallGrocery</string>
           <number>22271</number>
           <number>28206</number>
       </vtable.insert>
       <vtable.insert name='v'>
           <string>USA</string>
           <string>WA</string>
           <string>Supermarket</string>
           <number>59758</number>
           <number>91179</number>
       </vtable.insert>

       <!--
           Result:

           +===========+==================+============+============+============+==========+==========+==========+
           |store_state|store_type        |Canada      |Mexico      |USA         |Canada    |Mexico    |USA       |
           |           |                  |grocery_sqft|grocery_sqft|grocery_sqft|store_sqft|store_sqft|store_sqft|
           +===========+==================+============+============+============+==========+==========+==========+
           |BC         |Mid-SizeGrocery   |      27.463|            |            |    34.452|          |          |
           |DF         |DeluxeSupermarket |            |           0|            |          |         0|          |
           |DF         |Mid-SizeGrocery   |            |      22.450|            |          |    36.509|          |
           |Guerrero   |Supermarket       |            |      17.475|            |          |    23.593|          |
           |Jalisco    |SmallGrocery      |            |      15.012|            |          |    24.597|          |
           |Veracruz   |Supermarket       |            |      26.354|            |          |    34.791|          |
           |Yucatan    |DeluxeSupermarket |            |      20.141|            |          |    30.797|          |
           |Zacatecas  |DeluxeSupermarket |            |      21.938|            |          |    30.584|          |
           |Zacatecas  |GourmetSupermarket|            |      16.844|            |          |    23.759|          |
           |Zacatecas  |Mid-SizeGrocery   |            |      30.351|            |          |    38.382|          |
           |CA         |GourmetSupermarket|            |            |      15.337|          |          |    23.688|
           |CA         |HeadQuarters      |            |            |           0|          |          |         0|
           |CA         |SmallGrocery      |            |            |      15.321|          |          |    22.478|
           |CA         |Supermarket       |            |            |      14.210|          |          |    23.598|
           |OR         |DeluxeSupermarket |            |            |      18.670|          |          |    27.694|
           |OR         |Supermarket       |            |            |      16.232|          |          |    20.319|
           |WA         |DeluxeSupermarket |            |            |      22.123|          |          |    33.858|
           |WA         |Mid-SizeGrocery   |            |            |           0|          |          |         0|
           |WA         |SmallGrocery      |            |            |      22.271|          |          |    28.206|
           |WA         |Supermarket       |            |            |      59.758|          |          |    91.179|
           +===========+==================+============+============+============+==========+==========+==========+
   -->
       <println>
           <vtable.pivot name='v' pivotcolumns='store_country' datacolumns='grocery_sqft,store_sqft' datalabels='Grocery,Store' />
       </println>

    <!--
           Result:
           +===========+==================+============+============+============+==========+==========+==========+
           |store_state|store_type        |Canada      |Mexico      |USA         |Canada    |Mexico    |USA       |
           |           |                  |Grocery     |Grocery     |Grocery     |Store     |Store     |Store     |
           +===========+==================+============+============+============+==========+==========+==========+
           |BC         |Mid-SizeGrocery   |      27.463|            |            |    34.452|          |          |
           |DF         |DeluxeSupermarket |            |           0|            |          |         0|          |
           |DF         |Mid-SizeGrocery   |            |      22.450|            |          |    36.509|          |
           |Guerrero   |Supermarket       |            |      17.475|            |          |    23.593|          |
           |Jalisco    |SmallGrocery      |            |      15.012|            |          |    24.597|          |
           |Veracruz   |Supermarket       |            |      26.354|            |          |    34.791|          |
           |Yucatan    |DeluxeSupermarket |            |      20.141|            |          |    30.797|          |
           |Zacatecas  |DeluxeSupermarket |            |      21.938|            |          |    30.584|          |
           |Zacatecas  |GourmetSupermarket|            |      16.844|            |          |    23.759|          |
           |Zacatecas  |Mid-SizeGrocery   |            |      30.351|            |          |    38.382|          |
           |CA         |GourmetSupermarket|            |            |      15.337|          |          |    23.688|
           |CA         |HeadQuarters      |            |            |           0|          |          |         0|
           |CA         |SmallGrocery      |            |            |      15.321|          |          |    22.478|
           |CA         |Supermarket       |            |            |      14.210|          |          |    23.598|
           |OR         |DeluxeSupermarket |            |            |      18.670|          |          |    27.694|
           |OR         |Supermarket       |            |            |      16.232|          |          |    20.319|
           |WA         |DeluxeSupermarket |            |            |      22.123|          |          |    33.858|
           |WA         |Mid-SizeGrocery   |            |            |           0|          |          |         0|
           |WA         |SmallGrocery      |            |            |      22.271|          |          |    28.206|
           |WA         |Supermarket       |            |            |      59.758|          |          |    91.179|
           +===========+==================+============+============+============+==========+==========+==========+
   -->
   
   </body>
</xsql-script>