Bases de Datos > SQL Server

 Consulta compleja - ¿¿Es posible??

<< < (2/3) > >>

tonybolanyo:
Hola,

para "mezclar" los resultados como dices yo utilizaría UNION creando IDs para los totales que puedan ser intercalados entre los resultados iniciales. Por ejemplo, supongamos que quieres sumar los datos del campo1 según las condiciones que dices del ID:


--- Código: SQL ---SELECT id, campo1  FROM table_1UNIONSELECT SUBSTRING(CAST(id AS VARCHAR),1,3)+'999', SUM(campo1)  FROM table_1 GROUP BY SUBSTRING(CAST(id AS VARCHAR),1,3)+'999'UNIONSELECT '9'+SUBSTRING(CAST(id AS VARCHAR),1,2)+'999', SUM(campo1)  FROM table_1 GROUP BY '9'+SUBSTRING(CAST(id AS VARCHAR),1,2)+'999'ORDER BY id  
de esta manera los totales tendrían unos IDs ficticios que serían:
*1 - 351999
*2 - 352999
*3 - 353999
*4 - 384999
*5 - 385999
*6 - 386999
*7 - 935999
*8 - 938999

y de esta manera se intercalan en la posición adecuada al ordenar por la columna ID.

Espero te sea de ayuda.

T.

F_Tanori:
Creo que no capto muy bien lo que se pretende, pero creo que no seria tan necesario que fuera una sola sentencia, he entendido como lo ha puesto Juez salvo que en lugar de sumar "campo1" sumarias el deseado, pero la solucion la encontrarias en un SP (procedimiento almacenado), y puedes devolver el resultado deseado en una tabla y despues hacer las consultas sobre esa tabla "nueva"

Tal vez puedas explicarnos de una manera mas grafica, o con algun ejemplo en excel por decir algo...

Saludos

davisoski:
Hola, de nuevo..

Gracias por el interes.

La opción que comenta juez es bastante aproximada a lo que necesito, aunque la forma que comenta f_tanori también me serviría. Al final lo que necesito es tenerlo en un recordset.

Os envío un fichero excel con un ejemplo real..

Este es más simple que el del primer post, en el que solo necesito separarlo por los dos primeros caracteres del índice, en este caso están 35 y 38, y al final se añaden 3 filas nuevas.
Salu2 y gracias

Shiquilla:
Hola, podrías también ver la opción de utilizar GROUPING.


--- Código: SQL ---SELECT Municipio, LEFT(LTRIM(Municipio), 3), LEFT(LTRIM(Municipio), 2),     CASE         WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 0 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 0 THEN 'Linea'        WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 0 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 1 THEN 'Total agrupacion LEFT(3)'        WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 1 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 1 THEN 'Total agrupacion LEFT(2)'    ELSE 'Total' END,    SUM(Total) AS Total, SUM(residente) AS Residente, SUM(reside) AS Reside, SUM(residetrabaja) AS ResideTrabaja, SUM(resideestudia) AS ResideEstudiaFROM TablaGROUP BY LEFT(LTRIM(Municipio), 2), LEFT(LTRIM(Municipio), 3), Municipio WITH ROLLUP 
Aquí tienes la consulta que necesitabas, ahora ya sólo queda que la ordenes como quieras.

Saludos,

davisoski:
Hola.

gracias de nuevo por responder, la verdad es que no tenía ni idea de que esto se pudiera hacer (ni siquiera conocía rollup, cube). He probado tu consulta en sql server 2000, pero no me funciona (es bastante compleja), de todas maneras buscando por ahí he encontrado ejemplos que me pueden servir de punto de partida para intentar entender este asunto.

Muchas gracias
salu2

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa