Ayuda con nueva sentencia SQL

17 views
Skip to first unread message

Masternet

unread,
Oct 31, 2011, 3:22:10 PM10/31/11
to Comunidad de Visual Foxpro en Español
Hola, vuelvo a necesitar ayuda con otra sentencia SQL.
Soy bastante novato en SQL y aunque lo intento no me acaba de salir lo
que quiero

Necesito fusionar los registros de 2 tablas y sumar su valor

Cursor1: Código Valor
1 10
2 20
3 30

Cursor2: Código Valor
1 5
4 40

El Resultado debería ser:

Cursor3: Código Valor
1 15
2 20
3 30
4 40

Muchas gracias por vuestras respuestas

Samuel SMH

unread,
Oct 31, 2011, 3:43:36 PM10/31/11
to publice...@googlegroups.com
Hola MasterNet,
por ahora no cuento con SQL SERVER, pero en ORACLE va así:

SELECT MAX(codigo) codigo,sum(valor) valor
FROM
(
  SELECT *
  FROM (SELECT 1 codigo, 10 valor FROM dual UNION ALL SELECT  2,  20 FROM dual UNION ALL SELECT  3,  30 FROM dual) t1
  UNION ALL
  SELECT *
  FROM (SELECT 1 codigo, 5 valor FROM dual UNION ALL SELECT 4, 40 FROM dual) t2
)
GROUP BY codigo ORDER BY codigo;

Daniel

unread,
Oct 31, 2011, 5:07:41 PM10/31/11
to Comunidad de Visual Foxpro en Español
Hola:

Para hacerlo en una única sentencia, se podría plantear lo siguiente:

SELECT codigo, SUM(valor) FROM ;
(SELECT codigo, valor FROM cursor1 UNION ALL SELECT codigo, valor FROM
cursor2) as cursor3 ;
GROUP BY codigo INTO CURSOR cursor3

Notas:
- La sentencia SELECT entre paréntesis hace una unión de los dos
cursores en uno solo, al cual llama cursor3.
- El SELECT más general (el primero), hace una selección sobre cursor3
obteniendo las sumas de valores pretendidas que se agrupan por código
(que es lo que se indica en la última sección: GROUP BY...).
- El cursor final y el temporal se llaman ambos cursor3 por simple
capricho de no dejar cursores extra en memoria. Se puede usar
tranquilamente cursores distintos.

Espero que sirva. Éxitos.
--------------------------------------------------------------------------------------------------------------

Masternet

unread,
Nov 4, 2011, 2:49:21 PM11/4/11
to Comunidad de Visual Foxpro en Español
Hola Daniel,

Funciona con un pequeño problema.
El resultado crea un primer registro con codigo en blanco y valor 0.
También he probado de crear el resultado en 2 cursores diferentes,
cursor3 y cursor4, pero observo que el cursor3 no se llega a crear

Muchas gracias

Pablo Daniel

unread,
Nov 4, 2011, 3:07:12 PM11/4/11
to Comunidad de Visual Foxpro en Español
Hola:

Lo volví a probar y me funcionó correctamente.

Lo que se me ocurre es que alguno de los cursores podría tener un
registro en blanco. Por ejemplo, yo hice una pruebita generando los
cursores, luego hacía:
SELECT cursor1
APPEND BLANK && Esto genera un registro nuevo, con los valores "" y
0 si los tipos de datos son codigo c(1), valor i, por ejemplo.

Y en ese caso, sí, al ejecutar la consulta me agregaba un registro
inicial vacío. Te recomiendo que revises los cursores antes de hacer
la consulta, para ver que tienen.

Éxitos. Saludos.
-----------------------------------------------------------------------------------------------------------------------------
Reply all
Reply to author
Forward
0 new messages