Agrupa las filas de la tabla virtual por columnas, añadiendo grupos de ruptura con la opción de sumatorios.
1 vtable.groupByAddingAggRowsFirst
<vtable.groupByAddingAggRowsFirst
name='name'
group='group'
measure='measure'
percent='percent'
sum='sum'
/>
Attributes | |||||
---|---|---|---|---|---|
Name | Type | Required | Default | Description | |
Aname | string | Nombre de la tabla a agrupar. | |||
Agroup | string | Nombre de las columnas por las que se agrupa. | |||
Ameasure | string | Nombre de la columna calculada en la agrupación. | |||
Apercent | string | Nombre de la columna de porcentaje de la agrupación con respecto al total. | |||
Asum | string | Nombre de la columna a sumar. |
Returns | |
---|---|
Type | Description |
ResultSet | Conjunto de filas originales más las de totales. |
sum
El atributo sum está disponible desde la versión 2017.2
Example
Agrupar y sumar una tabla virtual por columnas.
Copy
<xsql-script> <body> <function name="test1"> <body> <vtable name='v1'> <column name='country' type='char' /> <column name='city' type='char' /> <column name='store' type='char' /> <column name='sales' type='decimal' /> <column name='percent_of_sales' type='decimal' scale='2' /> </vtable> <vtable.insert name='v1'> <matrix> { "FR", "Paris", "Champs elise", "500", "50" } { "FR", "Paris", "Degaulle", "250", "50" } { "FR", "Paris", "Efiel", "250", "25" } { "FR", "Lyo" , "Rue Leon X", "200", "50" } { "FR", "Lyo" , "Nantes", "200", "50" } { "FR", "Montpeller", "Napoleo I", "100", "50" } { "FR", "Montpeller", "Napoleo III", "100", "50" } { "ES", "Barcelona", "Paseig Gracia", "400", "40" } { "ES", "Barcelona", "Rambla Catalunya", "300", "30" } { "ES", "Barcelona", "Diagonal", "200", "30" } { "ES", "Madrid", "Serrano", "200", "50" } { "ES", "Madrid", "Castellana", "200", "50" } { "ES", "Sevilla", "Macarena", "100", "100" } </matrix> </vtable.insert> <println> <v1 /> </println> <println> <vtable.groupByAddingAggRowsFirst name='v1' group='country' /> </println> <println> <vtable.groupByAddingAggRowsFirst name='v1' group='country' sum='sales' /> </println> <println> <vtable.groupByAddingAggRowsFirst name='v1' group='country, city' sum='sales' /> </println> </body> </function> <test1 /> </body> </xsql-script>
Resultado de los println (orden secuencial):
+-------+----------+----------------+-------+----------------+
|country|city |store |sales |percent_of_sales|
|char |char |char |decimal|decimal |
|visible|visible |visible |visible|visible |
+-------+----------+----------------+-------+----------------+
|FR |Paris |Champs elise |500.000| 50.00|
|FR |Paris |Degaulle |250.000| 50.00|
|FR |Paris |Efiel |250.000| 25.00|
|FR |Lyo |Rue Leon X |200.000| 50.00|
|FR |Lyo |Nantes |200.000| 50.00|
|FR |Montpeller|Napoleo I |100.000| 50.00|
|FR |Montpeller|Napoleo III |100.000| 50.00|
|ES |Barcelona |Paseig Gracia |400.000| 40.00|
|ES |Barcelona |Rambla Catalunya|300.000| 30.00|
|ES |Barcelona |Diagonal |200.000| 30.00|
|ES |Madrid |Serrano |200.000| 50.00|
|ES |Madrid |Castellana |200.000| 50.00|
|ES |Sevilla |Macarena |100.000| 100.00|
+-------+----------+----------------+-------+----------------+
+-------+----------+----------------+-------+----------------+
|country|city |store |sales |percent_of_sales|
|char |char |char |decimal|decimal |
|visible|visible |visible |visible|visible |
+-------+----------+----------------+-------+----------------+
|FR | | | | |
|FR |Paris |Champs elise |500,000| 50,00|
|FR |Paris |Degaulle |250,000| 50,00|
|FR |Paris |Efiel |250,000| 25,00|
|FR |Lyo |Rue Leon X |200,000| 50,00|
|FR |Lyo |Nantes |200,000| 50,00|
|FR |Montpeller|Napoleo I |100,000| 50,00|
|FR |Montpeller|Napoleo III |100,000| 50,00|
|ES | | | | |
|ES |Barcelona |Paseig Gracia |400,000| 40,00|
|ES |Barcelona |Rambla Catalunya|300,000| 30,00|
|ES |Barcelona |Diagonal |200,000| 30,00|
|ES |Madrid |Serrano |200,000| 50,00|
|ES |Madrid |Castellana |200,000| 50,00|
|ES |Sevilla |Macarena |100,000| 100,00|
+-------+----------+----------------+-------+----------------+
+-------+----------+----------------+--------+----------------+
|country|city |store |sales |percent_of_sales|
|char |char |char |decimal |decimal |
|visible|visible |visible |visible |visible |
+-------+----------+----------------+--------+----------------+
|FR | | |1600,000| |
|FR |Paris |Champs elise | 500,000| 50,00|
|FR |Paris |Degaulle | 250,000| 50,00|
|FR |Paris |Efiel | 250,000| 25,00|
|FR |Lyo |Rue Leon X | 200,000| 50,00|
|FR |Lyo |Nantes | 200,000| 50,00|
|FR |Montpeller|Napoleo I | 100,000| 50,00|
|FR |Montpeller|Napoleo III | 100,000| 50,00|
|ES | | |1400,000| |
|ES |Barcelona |Paseig Gracia | 400,000| 40,00|
|ES |Barcelona |Rambla Catalunya| 300,000| 30,00|
|ES |Barcelona |Diagonal | 200,000| 30,00|
|ES |Madrid |Serrano | 200,000| 50,00|
|ES |Madrid |Castellana | 200,000| 50,00|
|ES |Sevilla |Macarena | 100,000| 100,00|
+-------+----------+----------------+--------+----------------+
+-------+----------+----------------+--------+----------------+
|country|city |store |sales |percent_of_sales|
|char |char |char |decimal |decimal |
|visible|visible |visible |visible |visible |
+-------+----------+----------------+--------+----------------+
|FR | | |1600,000| |
|FR |Paris | |1000,000| |
|FR |Paris |Champs elise | 500,000| 50,00|
|FR |Paris |Degaulle | 250,000| 50,00|
|FR |Paris |Efiel | 250,000| 25,00|
|FR |Lyo | | 400,000| |
|FR |Lyo |Rue Leon X | 200,000| 50,00|
|FR |Lyo |Nantes | 200,000| 50,00|
|FR |Montpeller| | 200,000| |
|FR |Montpeller|Napoleo I | 100,000| 50,00|
|FR |Montpeller|Napoleo III | 100,000| 50,00|
|ES | | |1400,000| |
|ES |Barcelona | | 900,000| |
|ES |Barcelona |Paseig Gracia | 400,000| 40,00|
|ES |Barcelona |Rambla Catalunya| 300,000| 30,00|
|ES |Barcelona |Diagonal | 200,000| 30,00|
|ES |Madrid | | 400,000| |
|ES |Madrid |Serrano | 200,000| 50,00|
|ES |Madrid |Castellana | 200,000| 50,00|
|ES |Sevilla | | 100,000| |
|ES |Sevilla |Macarena | 100,000| 100,00|
+-------+----------+----------------+--------+----------------+