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'
/>

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|
+-------+----------+----------------+--------+----------------+