Ordena el contenido de una tabla virtual por la columna o columnas indicadas. El orden por defecto es ascendente, pero puede indicarse que sea descendente añadiendo la clásula desc al lado del nombre de la columna.

1 vtable.sort

<vtable.sort
    name='name'
    columns='columns'
    group-by='group-by'
>
    <var /> ?
</vtable.sort>
Example

El siguiente ejemplo muestra como se ordena una tabla virtual por una columna de forma ascendente (por defecto). Nota: pueden especificarse también las columnas a ordenar por índice.

Copy
<xsql-script name='vtable_sort_sample1'>
    <body>
        <vtable name='personas'>
            <column name='dni'       type='string' unique='true' />
            <column name='nombre'    type='string'               />
            <column name='apellido1' type='string'               />
            <column name='apellido2' type='string'               />
        </vtable>

        <vtable.insert name='personas'>
            <string>46352700Z</string>
            <string>John</string>
            <string>Smith</string>
            <string>Simpson</string>
        </vtable.insert>

        <vtable.insert name='personas'>
            <string>77352700Z</string>
            <string>George</string>
            <string>North</string>
            <string>Stone</string>
        </vtable.insert>

        <println>
            <vtable.sort name='personas' columns='apellido1' />
        </println>

        <println>
            <vtable.sort name='personas' columns='3' />
        </println>
    </body>
</xsql-script>

Se muestra por pantalla el contenido de la tabla virtual, ordenado por la columna apellido1:

Copy
+---------+------+---------+---------+
|dni      |nombre|apellido1|apellido2|
+---------+------+---------+---------+
|77352700Z|George|North    |Stone    |
|46352700Z|John  |Smith    |Simpson  |
+---------+------+---------+---------+
Example

El siguiente ejemplo muestra como ordenar una vtable por varias columnas y como indicar la cláusula desc para que el orden de la columna sea descendiente.

Copy
<xsql-script name='vtable_sort_sample2'>
   <body>
      <vtable name='v_test'>
          <column name='c1' type='char' />
          <column name='c2' type='char' />
      </vtable>

      <vtable.insert name='v_test'>
          <string>0</string>
          <string>0</string>
      </vtable.insert>
      <vtable.insert name='v_test'>
          <string>0</string>
          <string>1</string>
      </vtable.insert>
      <vtable.insert name='v_test'>
          <string>1</string>
          <string>0</string>
      </vtable.insert>
      <vtable.insert name='v_test'>
          <string>1</string>
          <string>1</string>
      </vtable.insert>

      <println></println>

      <println>
          vtable.sort by c2,c1
          <vtable.sort name='v_test' columns='c2,c1' />
      </println>

      <println>
          vtable.sort by c1,c2 desc
          <vtable.sort name='v_test' columns='c1,c2 desc' />
      </println>
   </body>

</xsql-script>

Resultado de la ejecución:

Copy
Sort by c2,c1
+--+--+
|c1|c2|
+--+--+
|0 |0 |
|1 |0 |
|0 |1 |
|1 |1 |
+--+--+


Sort by c1,c2 desc
+--+--+
|c1|c2|
+--+--+
|0 |1 |
|0 |0 |
|1 |1 |
|1 |0 |
+--+--+
Example

El siguiente ejemplo muestra cómo se ordena una tabla virtual por varias columnas pero además con otras agrupadas mediante groupBy.

Copy
<xsql-script name='vtable_sort_goupby'>
   <body>
       <vtable name='v1'>
           <column name='store_country'          type='char' />
           <column name='store_state'            type='char' />
           <column name='store_type'             type='char' />
           <column name='store_sqft'             type='integer' />
       </vtable>

       <vtable.insert name='v1'>
            <matrix>
        { "Canada       ", "BC         ", "Deluxe Supermarket ", "23112" }
        { "Canada       ", "BC         ", "Mid-Size Grocery   ", "34452" }
        { "Mexico       ", "DF         ", "Deluxe Supermarket ", "0"     }
        { "Mexico       ", "DF         ", "Mid-Size Grocery   ", "36509" }
        { "Mexico       ", "Guerrero   ", "Supermarket        ", "23593" }
        { "Mexico       ", "Jalisco    ", "Small Grocery      ", "24597" }
        { "Mexico       ", "Veracruz   ", "Supermarket        ", "34791" }
        { "Mexico       ", "Yucatan    ", "Deluxe Supermarket ", "30797" }
        { "Mexico       ", "Zacatecas  ", "Deluxe Supermarket ", "30584" }
        { "Mexico       ", "Zacatecas  ", "Gourmet Supermarket", "23759" }
        { "Mexico       ", "Zacatecas  ", "Mid-Size Grocery   ", "38382" }
        { "USA          ", "CA         ", "Gourmet Supermarket", "23688" }
        { "USA          ", "CA         ", "HeadQuarters       ", "0"     }
        { "USA          ", "CA         ", "Small Grocery      ", "22478" }
        { "USA          ", "CA         ", "Supermarket        ", "23598" }
        { "USA          ", "OR         ", "Deluxe Supermarket ", "27694" }
        { "USA          ", "OR         ", "Supermarket        ", "20319" }
        { "USA          ", "WA         ", "Deluxe Supermarket ", "33858" }
        { "USA          ", "WA         ", "Mid-Size Grocery   ", "0"     }
        { "USA          ", "WA         ", "Small Grocery      ", "28206" }
        { "USA          ", "WA         ", "Supermarket        ", "91179" }
           </matrix>
       </vtable.insert>

       <println><v1/></println>

       <println><vtable.sort name='v1' columns='store_sqft' /></println>
       <println><vtable.sort name='v1' columns='store_sqft desc' group-by='store_country,store_state' /></println>

   </body>

</xsql-script>

Muestra el contenido de la tabla:

Copy
<println><v1/></println>

+-------------+-----------+-------------------+----------+
|store_country|store_state|store_type         |store_sqft|
|char         |char   |char           |integer   |
+-------------+-----------+-------------------+----------+
|Canada       |BC     |Deluxe Supermarket |     23112|
|Canada       |BC         |Mid-Size Grocery   |     34452|
|Mexico       |DF     |Deluxe Supermarket |         0|
|Mexico       |DF     |Mid-Size Grocery   |     36509|
|Mexico       |Guerrero   |Supermarket        |     23593|
|Mexico       |Jalisco    |Small Grocery      |     24597|
|Mexico       |Veracruz   |Supermarket        |     34791|
|Mexico       |Yucatan    |Deluxe Supermarket |     30797|
|Mexico       |Zacatecas  |Deluxe Supermarket |     30584|
|Mexico       |Zacatecas  |Gourmet Supermarket|     23759|
|Mexico       |Zacatecas  |Mid-Size Grocery   |     38382|
|USA          |CA     |Gourmet Supermarket|     23688|
|USA          |CA     |HeadQuarters       |         0|
|USA          |CA     |Small Grocery      |     22478|
|USA          |CA     |Supermarket        |     23598|
|USA          |OR     |Deluxe Supermarket |     27694|
|USA          |OR     |Supermarket        |     20319|
|USA          |WA     |Deluxe Supermarket |     33858|
|USA          |WA     |Mid-Size Grocery   |         0|
|USA          |WA     |Small Grocery      |     28206|
|USA          |WA     |Supermarket        |     91179|
+-------------+-----------+-------------------+----------+

Muestra el contenido de la tabla ordenada por el campo store_sqtf.

Copy
<vtable.sort name='v1' columns='store_sqft' />

+-------------+-----------+-------------------+----------+
|store_country|store_state|store_type         |store_sqft|
|char         |char       |char               |integer   |
+-------------+-----------+-------------------+----------+
|Mexico       |DF     |Deluxe Supermarket |         0|
|USA          |CA     |HeadQuarters       |     0|
|USA          |WA     |Mid-Size Grocery   |     0|
|USA          |OR     |Supermarket        |     20319|
|USA          |CA     |Small Grocery      |     22478|
|Canada       |BC     |Deluxe Supermarket |     23112|
|Mexico       |Guerrero   |Supermarket        |     23593|
|USA          |CA     |Supermarket        |     23598|
|USA          |CA     |Gourmet Supermarket|     23688|
|Mexico       |Zacatecas  |Gourmet Supermarket|     23759|
|Mexico       |Jalisco    |Small Grocery      |     24597|
|USA          |OR     |Deluxe Supermarket |     27694|
|USA          |WA     |Small Grocery      |     28206|
|Mexico       |Zacatecas  |Deluxe Supermarket |     30584|
|Mexico       |Yucatan    |Deluxe Supermarket |     30797|
|USA          |WA     |Deluxe Supermarket |     33858|
|Canada       |BC     |Mid-Size Grocery   |     34452|
|Mexico       |Veracruz   |Supermarket        |     34791|
|Mexico       |DF     |Mid-Size Grocery   |     36509|
|Mexico       |Zacatecas  |Mid-Size Grocery   |     38382|
|USA          |WA     |Supermarket        |     91179|
+-------------+-----------+-------------------+----------+

Se muestra por pantalla el contenido de la tabla virtual, ordenado por la columna store_sqft de forma descendente y agrupando las columnas store_country y store_state:

Copy
<println><vtable.sort name='v1' columns='store_sqft desc' group-by='store_country,store_state' /></println>

+-------------+-----------+-------------------+----------+
|store_country|store_state|store_type         |store_sqft|
|char         |char       |char               |integer   |
+-------------+-----------+-------------------+----------+
|Canada       |BC     |Mid-Size Grocery   |     34452|
|Canada       |BC     |Deluxe Supermarket |     23112|
|Mexico       |DF     |Mid-Size Grocery   |     36509|
|Mexico       |DF     |Deluxe Supermarket |         0|
|Mexico       |Guerrero   |Supermarket        |     23593|
|Mexico       |Jalisco    |Small Grocery      |     24597|
|Mexico       |Veracruz   |Supermarket        |     34791|
|Mexico       |Yucatan    |Deluxe Supermarket |     30797|
|Mexico       |Zacatecas  |Mid-Size Grocery   |     38382|
|Mexico       |Zacatecas  |Deluxe Supermarket |     30584|
|Mexico       |Zacatecas  |Gourmet Supermarket|     23759|
|USA          |CA     |Gourmet Supermarket|     23688|
|USA          |CA     |Supermarket        |     23598|
|USA          |CA     |Small Grocery      |     22478|
|USA          |CA     |HeadQuarters       |         0|
|USA          |OR     |Deluxe Supermarket |     27694|
|USA          |OR     |Supermarket        |     20319|
|USA          |WA     |Supermarket        |     91179|
|USA          |WA     |Deluxe Supermarket |     33858|
|USA          |WA     |Small Grocery      |     28206|
|USA          |WA     |Mid-Size Grocery   |     0|
+-------------+-----------+-------------------+----------+