Bases de Datos > SQL Server
Consulta compleja - ¿¿Es posible??
davisoski:
Hola.
Me gustaría saber si es posible (que creo que no) hacer lo siguiente:
supongamos que tengo una tabla con la siguiente estructura
ID, cAMPO1, CAMPO2, CAMPO3, ...., CAMPOn
ID contendrá los siguientes valores por fila (no pongo nada del resto de columnas)
351001
351002
351003
352004
352005
352006
353007
353008
384009
384010
385011
386012
Este campo lo puedo dividir así para el primer registro, por ejemplo: 38 - 1 - 001
Si yo hago un select * from miTabla obtendré estos 12 registros, hasta ahí todo bien.
Supongamos ahora que las columnas son de tipo entero,por tanto puedo obtener un total, pero a mi me interesa obtener varios
totales, de la siguiente forma:
Total tipo 1: Sería la suma de los elementos que corresponden al caracter en la posición 3 y que valen 1, tal que así
351001
351002
351003
suma de estos 3 elementos (*1)
352004
352005
352006
suma de estos 3 elementos (*2)
353007
353008
suma de estos 2 elementos (*3)
384009
384010
suma de estos 2 elementos (*4)
385011
suma de este elemento (*5)
386012
suma de este elemento (*6)
total tipo 2: seria la suma de los elementos (35 y 38) que coincidan con los dos primeros caracteres, tal que así:
351001
351002
351003
352004
352005
352006
353007
353008
suma de estos 8 elementos (*7)
384009
384010
385011
386012
suma de estos 4 elementos (*8)
Como resultado final debería obtener en este orden lo siguiente
351001
351002
351003
(*1)
352004
352005
352006
(*2)
353007
353008
(*3)
384009
384010
(*4)
385011
(*5)
386012
(*6)
(*7)
(*8)
por tanto en lugar de obtener 12 registros, debería obtener 20 registros en total.
Por que todo este follón????, porque hasta ahora yo consultaba la tabla y luego una vez que la tenía, vía codigo obtenía las
sumas que he comentado. El problema viene cuando obtengo, digamos 5000 registros y los quiero mostrar usando un <h:datable en
JSF, que he almacenado en una lista, que consume memoria y en la que dependiendo del número de columnas pues dará error de
memoria.
Hay una técnica llamada lazy-loading para resolver esto, pero necesita tirar del recordset con todos los resultados y me
pregunto si yo podría implementar en el servidor de bases de datos esta operativa para que me devuelva los datos que he
puesto anteriormente y pueda mostrarlo en la página sin problemas.
Bueno, espero haberme explicado.
Gracias.
arielb:
Creo que entendí, me parece que si se puede, yo haría la prueba con
--- Código: SQL ---SUBSTRING()len()LEFT()
Bueno espero te sirva, ahí nos cuentas como te fue
davisoski:
Hola.
Lo que comentas es para separar los campos y demás, pero para obtener las filas adicionales que comento, cómo sería, es esa mi principal duda?
Salu2
arielb:
Bueno usando lo que te comenté lo hice en oracle y me salio, creo que es lo que necesitas
--- Código: SQL ---SELECT SUM(CAMPO1),SUBSTR(TO_CHAR(CAMPO1),1,3) FROM PRUEBA2 WHERE SUBSTR(TO_CHAR(CAMPO1),1,3) = SUBSTR(TO_CHAR(CAMPO1),1,3) GROUP BY SUBSTR(TO_CHAR(CAMPO1),1,3)
nos comentas....
davisoski:
Hola.
perdona pero no me expliqué correctamente, esa columna no es la que tengo que sumar, esa columna es para obtener una nueva fila por los grupos
municipio actividad ventas
351001 100
351002 105
351003
352004
352005
352006
353007
353008
384009 200
384010
385011
386012
al final lo que necesito es obtener estas columnas que he puesto + una fila con la suma de las filas que comienzan por 351, otra + con la suma de las filas que comiezan por 352, etc.. luego otra por con la suma de las que empiezan por 384, etc..
es un poco complicado la verdad, no se si me explicado correctamente.
salu2 y gracias
Navegación
[#] Página Siguiente
Ir a la versión completa