1 vtable.sort
<vtable.sort
name='name'
columns='columns'
group-by='group-by'
>
<var /> ?
</vtable.sort>
Attributes | |||||
---|---|---|---|---|---|
Name | Type | Required | Default | Description | |
Aname | string | Nombre de la tabla virtual. La tabla virtual se puede indicar mediante este atributo o bien puede pasarse como un argumento. | |||
Acolumns | string | Nombre o índice de las columnas por las que se desea ordenar. Por defecto el orden es ascendente, pero se puede indicar descendente con la palabra reservada DESC. Por compatibilidad con versiones anteriores se puede hacer referencia al atributo mediante column. | |||
Agroup-by | string | Nombres de las columnas a agrupar. Cada grupo de filas formado es ordenado separadamente según las columnas especificadas por el atributo precedente. |
Arguments | |||||
---|---|---|---|---|---|
Name | Type | Required | Unique | Nullable | Description |
Evar | vtable | Tabla virtual. Puede indicarse mediante el atributo name o bien pasarse como un argumento. |
Returns | |
---|---|
Type | Description |
Vtable | El propio objeto. |
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.
<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:
+---------+------+---------+---------+ |dni |nombre|apellido1|apellido2| +---------+------+---------+---------+ |77352700Z|George|North |Stone | |46352700Z|John |Smith |Simpson | +---------+------+---------+---------+
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.
<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:
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 | +--+--+
El siguiente ejemplo muestra cómo se ordena una tabla virtual por varias columnas pero además con otras agrupadas mediante groupBy.
<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:
<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.
<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:
<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| +-------------+-----------+-------------------+----------+