Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Agregar SUM a una consulta

Hola a todos!!

Tengo un problema con una consulta que es para un reporte y necesito sumar algunos campos de ella.

El diagrama de la base de datos lo he adjuntado, y por favor no sean mal pensados, usé Access para dibujar las relaciones y poder mostrárselas, nada más.

He llegado hasta esta consulta, como verán hace un resumen de los pagos que debe recibir un trabajador. Por cada demanda de trabajo que el trabajador haya satisfecho, se genera un registro en la tabla DEMANDAPERSONAL. En la consulta que sigue se obtienen todos los pagos que debería recibir un trabajador, pero tengo que modificarla para que me muestre la suma total que debe recibir, es decir, la suma de todos los registros del trabajador y de los campos DEMANDAPERSONAL_EUROS y DEMANDAPERSONAL_EUROSAJUSTE.

He intentado varias formas de insertar la función SUM pero no me sale, ¿alguien tiene alguna idea?

Código SQL [-]
SELECT DEMANDAPERSONAL.PERSONAL_CODIGO, PERSONAL.PERSONAL_CIF, PERSONAL.PERSONAL_NOMBRE,
DEMANDAPERSONAL.DEMANDAPERSONAL_EUROS, DEMANDAPERSONAL.DEMANDAPERSONAL_EUROSAJUSTE FROM DEMANDAPERSONAL left join PERSONAL
ON PERSONAL.PERSONAL_CODIGO=DEMANDAPERSONAL.PERSONAL_CODIGO WHERE DEMANDAPERSONAL.DEMANDA_CODIGO IN
(SELECT DEMANDA.DEMANDA_CODIGO FROM DEMANDA, PAGODEMANDA
WHERE DEMANDA.DEMANDA_CODIGO=PAGODEMANDA.DEMANDA_CODIGO 
AND PAGODEMANDA.PAGODEMANDA_CODIGO=:codPago) ORDER BY DEMANDAPERSONAL.PERSONAL_CODIGO

Creo que me falto decir que uso Interbase 6.
Imágenes Adjuntas
Tipo de Archivo: jpg der.JPG (26,3 KB, 6 visitas)
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #2  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Quería hacer un comentario sobre SUM. Siempre que he leído o consultado manuales de SQL, para aprender el uso de funciones como esta, me encuentro con ejemplos del tipo:

Código SQL [-]
SELECT SUM (CANTIDAD) FROM TABLA

a lo sumo, alguna incluye un ejemplo con agrupación de registros, al estilo:

Código SQL [-]
SELECT CODIGO, SUM (CANTIDAD) FROM TABLA GROUP BY CODIGO

Pero cuando he necesitado el uso de esta función, siempre ha sido en casos de consulta a más de una tabla, al estilo:

Código SQL [-]
SELECT A.CODIGO, A. NOMBRE, B.CANTIDAD FROM A, B WHERE A.CODIGO=B.CODIGO

Y en esos momentos me gustaría insertar un SUM algo así:

Código SQL [-]
SELECT A.CODIGO, A. NOMBRE, SUM(B.CANTIDAD) FROM A, B WHERE A.CODIGO=B.CODIGO GROUP BY A.CODIGO

Pero siempre me marca error.

Lo que no me termina de quedar claro es si se puede ocupar la función SUM cuando estas consultando más de una tabla. Nunca he visto un ejemplo donde se muestre ese caso.

Si alguno tiene una consulta como la que menciono, le agradecería que la pusiera para poder ver como se hace, ya que así sabría como resolver el problema del mensaje anterior.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #3  
Antiguo 08-10-2007
pcicom pcicom is offline
Miembro
 
Registrado: may 2003
Ubicación: MONTERREY MEXICO
Posts: 253
Poder: 22
pcicom Va por buen camino
Código SQL [-]
SELECT A.CODIGO, A. NOMBRE, SUM(B.CANTIDAD) FROM A, B WHERE A.CODIGO=B.CODIGO GROUP BY A.CODIGO

La manera correcta de usar SUM,COUNT.. debe estar siempre relacionada con la AGRUPACION( GROUP ) que indiques.. y deben de ser los campos que anteceden a la SUM... en este caso seria asi...

Código SQL [-]
SELECT A.CODIGO, A. NOMBRE, SUM(B.CANTIDAD) FROM A, B WHERE A.CODIGO=B.CODIGO GROUP BY A.CODIGO,A.NOMBRE

/*  o Tambien puede ser Asi: */


SELECT A.CODIGO, A. NOMBRE, SUM(B.CANTIDAD) FROM A, B WHERE A.CODIGO=B.CODIGO GROUP BY 1,2

/* Si fueran 3  antes del SUM deberian de ser asi.. */

SELECT A.CODIGO, A. NOMBRE, A.APELLIDO SUM(B.CANTIDAD) FROM A, B WHERE A.CODIGO=B.CODIGO GROUP BY 1,2,3


/* Si fueran "N"  antes del SUM deberian de ser asi.. */

SELECT A.CODIGO, A. NOMBRE,campo3 ....   campoN, SUM(B.CANTIDAD) FROM A, B WHERE A.CODIGO=B.CODIGO GROUP BY 1,2,3...,N


Espero te aclare un poco esto...
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton
Responder Con Cita
  #4  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por pcicom Ver Mensaje
Código SQL [-]
SELECT A.CODIGO, A. NOMBRE, SUM(B.CANTIDAD) FROM A, B 
WHERE A.CODIGO=B.CODIGO GROUP BY A.CODIGO

La manera correcta de usar SUM,COUNT.. debe estar siempre relacionada con la AGRUPACION( GROUP ) que indiques.. y deben de ser los campos que anteceden a la SUM... en este caso seria asi...

Código SQL [-]
SELECT A.CODIGO, A. NOMBRE, SUM(B.CANTIDAD) FROM A, B 
WHERE A.CODIGO=B.CODIGO GROUP BY A.CODIGO,A.NOMBRE

Espero te aclare un poco esto...
Y si, siguiendo con el ejemplo, no deseo agrupar por el nombre, ¿valdría hacerlo así?

Código SQL [-]
SELECT A.CODIGO, SUM(B.CANTIDAD), A. NOMBRE FROM A, B 
WHERE A.CODIGO=B.CODIGO GROUP BY A.CODIGO

Voy a probarlo, ya que en realidad sólo necesito agrupar por el código, pero si necesito el resto de los datos.

Gracias por tu respuesta.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.

Última edición por Gabo fecha: 08-10-2007 a las 17:55:22.
Responder Con Cita
  #5  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Lo acabo de probar y no funciona...

Ese es el asunto, que necesito que la consulta obtenga más datos de las tablas...

Seguiré intentándolo. Si doy con la solución les avisaré.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #6  
Antiguo 10-10-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por Gabo Ver Mensaje
Y si, siguiendo con el ejemplo, no deseo agrupar por el nombre, ¿valdría hacerlo así?

Código SQL [-]SELECT A.CODIGO, SUM(B.CANTIDAD), A. NOMBRE FROM A, B
WHERE A.CODIGO=B.CODIGO GROUP BY A.CODIGO


Voy a probarlo, ya que en realidad sólo necesito agrupar por el código, pero si necesito el resto de los datos.

Gracias por tu respuesta.
Si no quieres agrupar por el nombre no lo incluyas en la consulta, porque no sé que sentido tiene que quieras sumar un campo y mostrar otro por el que no agrupes, ya que en este caso el sum daría como resultado siempre 1, ya que la consulta te devolvería un registro por cada registro de la tabla.

¿Por qué no nos dices lo que quieres conseguir para poder ayudarte mejor?, porque lo de querer obtener un acumulado por un campo que no agrupas no tiene mucho sentido, ya que el resultado como te dije anteriormente sería siempre 1.

Un saúdo, y espero poder ayudarte.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #7  
Antiguo 10-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Es que la función de agrupación funciona así y punto.... no hay más vueltas. Si incluyes una función Sum, avg,etc, debes poner todos los demás campos en el group by

Si por un lado necesitas sumas y además otros campos, realiza 2 consultas, una con el Sum y la otra con los datos que necesitas.

En casos complejos, se puede usar un Procedimiento almacenado (si tu SGBBDD lo permite).


Edito: acabo de ver que usas Interbase, aquí va un ejemplo de un SP de selección:
Código SQL [-]
Create procedure Dame_gente() 
returns
( ELpersonal_nombre  varchar(30),
  ELpersonal_codigo integer,
  ELdemanda_personal numeric(10,2))
as
begin
   for select personal_codigo, sum(demanda_personal)
   from demanda_personal
   group by personal_codigo
   into :ELpersonal_codigo, :ELdemanda_personal do
   begin
   
 /* este es el truco, suponemos que no nos dejaba incluir el nombre porque al usar
    varias tablas lo debíamos de meter en el Group by y no nos daba los resultados
    que esperábamos. Pues lo hacemos en dos partes:
    - Primero hacemos un select con las sumas
    - Después buscamos en las demás tablas los datos para completar el registro que queremos devolver
      con todos los datos juntos
 */
     select personal_nombre 
     from personal
     where codigo_personal = :ELpersonal_codigo
     into :Elpersonal_nombre;
   
     suspend;  //devolvemos todos los parametros que han sido asignados
  end;
end;

Forma de uso:
Código Delphi [-]
  qry1.sql.text := 'select * from Dame_gente';
  qry1.Open;

Como ves en el ejemplo, puedes hacer lo que te apetezca, realmente lo que se hace es construir un registro a mano, como si fuera un puzzle, añadiendo los valores que nos apetezca.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 10-10-2007 a las 11:09:21.
Responder Con Cita
  #8  
Antiguo 10-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
Si no quieres agrupar por el nombre no lo incluyas en la consulta, porque no sé que sentido tiene que quieras sumar un campo y mostrar otro por el que no agrupes, ya que en este caso el sum daría como resultado siempre 1, ya que la consulta te devolvería un registro por cada registro de la tabla.

¿Por qué no nos dices lo que quieres conseguir para poder ayudarte mejor?, porque lo de querer obtener un acumulado por un campo que no agrupas no tiene mucho sentido, ya que el resultado como te dije anteriormente sería siempre 1.

Un saúdo, y espero poder ayudarte.
No veo porqué no tiene sentido la pregunta...

Si tienes una tabla PERSONAL con dos campos nada más PERSONAL_CODIGO y PERSONAL_NOMBRE y otra TRABAJOS con los campos TRABAJOS_CODIGO, PERSONAL_CODIGO y TRABAJOS_MONTO y deseas obtener un reporte de éste tipo:

Código:
 
NOMBRE    MONTO
PEDRO     1.023
JOSE      1.114
etc...
En la consulta, necesitas obtener el nombre del personal para desplegarlo, pero la agrupación la debes hacer por el código del personal, ¿o no? Si agrupas por el nombre puede pasar que dos personas se llaman igual y te mezcle sus montos. ¿O estoy equivocado? Creo que no.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #9  
Antiguo 10-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Es que la función de agrupación funciona así y punto.... no hay más vueltas. Si incluyes una función Sum, avg,etc, debes poner todos los demás campos en el group by
Ese era un punto en el que tenía dudas. No sabía si de alguna manera se podían pedir datos sin agruparlos. Gracias.

Cita:
Empezado por Lepe Ver Mensaje
Si por un lado necesitas sumas y además otros campos, realiza 2 consultas, una con el Sum y la otra con los datos que necesitas.
Lamentablemente Interbase (al menos la versión 6) no me permite hacer consultas a consultas, es decir:

Código SQL [-]
Select xyz from (Select xyz from xyz)

Ya que con eso si lo podría lograr.

Cita:
Empezado por Lepe Ver Mensaje
En casos complejos, se puede usar un Procedimiento almacenado (si tu SGBBDD lo permite).

Edito: acabo de ver que usas Interbase, aquí va un ejemplo de un SP de selección:

Código SQL [-]
Create procedure Dame_gente()
returns
( ELpersonal_nombre varchar(30),
ELpersonal_codigo integer,
ELdemanda_personal numeric(10,2))
as
begin
for select personal_codigo, sum(demanda_personal)
from demanda_personal
group by personal_codigo
into :ELpersonal_codigo, :ELdemanda_personal do
begin
/* este es el truco, suponemos que no nos dejaba incluir el nombre porque al usar
varias tablas lo debíamos de meter en el Group by y no nos daba los resultados
que esperábamos. Pues lo hacemos en dos partes:
- Primero hacemos un select con las sumas
- Después buscamos en las demás tablas los datos para completar el registro que queremos devolver
con todos los datos juntos
*/
select personal_nombre
from personal
where codigo_personal = :ELpersonal_codigo
into :Elpersonal_nombre;
suspend; //devolvemos todos los parametros que han sido asignados
end;
end;

Forma de uso:



Código Delphi [-]
qry1.sql.text := 'select * from Dame_gente';
qry1.Open;

Como ves en el ejemplo, puedes hacer lo que te apetezca, realmente lo que se hace es construir un registro a mano, como si fuera un puzzle, añadiendo los valores que nos apetezca.


Saludos
[] Reconozco que los procedimiento almacenados no son mi fuerte[/]
Pero veo que ahí está la solución al problema, asi que...

Lamentablemente hoy no estoy en la oficina, pero mañana, en cuanto llegué, probaré eso y les contaré...

Gracias por la ayuda!!!!
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.

Última edición por Gabo fecha: 10-10-2007 a las 12:03:42.
Responder Con Cita
  #10  
Antiguo 10-10-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por Gabo Ver Mensaje
No veo porqué no tiene sentido la pregunta...

Si tienes una tabla PERSONAL con dos campos nada más PERSONAL_CODIGO y PERSONAL_NOMBRE y otra TRABAJOS con los campos TRABAJOS_CODIGO, PERSONAL_CODIGO y TRABAJOS_MONTO y deseas obtener un reporte de éste tipo:

Código:
 
NOMBRE    MONTO
PEDRO     1.023
JOSE      1.114
etc...
En la consulta, necesitas obtener el nombre del personal para desplegarlo, pero la agrupación la debes hacer por el código del personal, ¿o no? Si agrupas por el nombre puede pasar que dos personas se llaman igual y te mezcle sus montos. ¿O estoy equivocado? Creo que no.
Si agrupas sólo por nombre pasaría lo que tu dices, pero para eso tienes que agrupar por código y nombre. Es que no entiendo por qué no quieres incluir el nombre en el group by.

Te va a devolver los mismos registros agrupar por código sólo que agrupar por codigo y nombre, pero si quieres incluir el nombre en la select tiene que incluirlo tambien en el group by.

Para lo que tu quieres no te hace falta usar un procedimiento almacenado

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #11  
Antiguo 10-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
Si agrupas sólo por nombre pasaría lo que tu dices, pero para eso tienes que agrupar por código y nombre. Es que no entiendo por qué no quieres incluir el nombre en el group by.

Te va a devolver los mismos registros agrupar por código sólo que agrupar por codigo y nombre, pero si quieres incluir el nombre en la select tiene que incluirlo tambien en el group by.

Para lo que tu quieres no te hace falta usar un procedimiento almacenado

Un saúdo.
Creo que lo que pasa es que estoy mal con los conceptos, el group by sólo ordena los registros no hace el resumen de ellos, bajo esa premisa, no debería tener problemas al pedir lo que me dices.

Prometo probarlo mañana en cuanto llegue a la oficina.

Gracias!!!!
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #12  
Antiguo 10-10-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Creo que estás confundiendo el group by con el order by.

El group by agrupa los registros de una select por los campos indicados e decir si tienes :
Código:
Personal.id  Personal.nombre  Trabajos.monto
1               Breogan               100
1               Breogan               50
2               Brais                 100
3               Uxía                  150
4               Saleta                25
3               Uxía                  10
y agrupas por Personal.id y Personal.Nombre, realizando la suma de los montos obtendras lo siguiente
Código:
Personal.id  Personal.nombre  Trabajos.monto
1               Breogan               150
2               Brais                 100
3               Uxía                  160
4               Saleta                25
El group by lo puedes combinar con el order by para ordenar por los campos que desees.

Un saúdo
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)

Última edición por Ivanzinho fecha: 10-10-2007 a las 13:44:55.
Responder Con Cita
  #13  
Antiguo 10-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
Creo que estás confundiendo el group by con el order by.
Bueno no es ese en realidad mi problema, creo que en mi mensaje anterior no me explique bien.

Cita:
Empezado por Ivanzinho Ver Mensaje
El group by agrupa los registros de una select por los campos indicados e decir si tienes :

y agrupas por Personal.id y Personal.Nombre, realizando la suma de los montos obtendras lo siguiente

El group by lo puedes combinar con el order by para ordenar por los campos que desees.

Un saúdo
Esto si que no lo tengo muy claro, pensaba que en un caso como éste:

Código:
Personal.id  Personal.nombre  Trabajos.monto
1               Breogan               100
1               Breogan               50
2               Brais                 100
3               Uxía                  150
4               Saleta                25
5               Uxía                  10    <--- Nota que he cambiado el código
igual me daría un resultado como éste, por haber agrupado por el nombre:
Código:
Personal.id  Personal.nombre  Trabajos.monto
1               Breogan               150
2               Brais                 100
3               Uxía                  160
4               Saleta                25
Pero ahora que lo pienso no es lógico, lo probaré mañana mismo...
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #14  
Antiguo 10-10-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Pero por eso tienes que agrupar por nombre y código, así se seleccionarán los distintos valores de la tupla (codigo, nombre), es decir, en el ejemplo que pusiste tu (3, Uxía) <> (5, Uxía), por lo que la consulta devolvería dos registros y no sólo uno.

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #15  
Antiguo 10-10-2007
pcicom pcicom is offline
Miembro
 
Registrado: may 2003
Ubicación: MONTERREY MEXICO
Posts: 253
Poder: 22
pcicom Va por buen camino
A Veces la Mejor Manera de APRENDER es un LEER e intentar comprender.

Cita:
PCICOM
La manera correcta de usar SUM,COUNT.. debe estar siempre relacionada con la AGRUPACION( GROUP ) que indiques.. y deben de ser los campos que anteceden a la SUM...
::
Cita:
Empezado por Lepe
Es que la función de agrupación funciona así y punto.... no hay más vueltas. Si incluyes una función Sum, avg,etc, debes poner todos los demás campos en el group by
::

Va de Nuez...

Puedes hacer una CONSULTA

Código SQL [-]
CREATE VIEW vTOTALES (
      NUMERO
      TOTAL
)
AS
 SELECT NUMERO,SUM(IMPORTE) FROM tabla GROUP BY NUMERO;

Ya entonces creada tu vista puedes jugar con ELLA..

Código SQL [-]

    SELECT a.NUMERO,a.TOTAL,personal.NOMBRE FROM vTOTALES a
        LEFT JOIN personal ON a.NUMERO=personal.NUMERO
    WHERE 
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton

Última edición por pcicom fecha: 10-10-2007 a las 17:41:25.
Responder Con Cita
  #16  
Antiguo 11-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por pcicom Ver Mensaje
A Veces la Mejor Manera de APRENDER es un LEER e intentar comprender.
Si eso hago, leo e intento comprender.

Lo que me dijiste en un principio, lo entendí claramente, pero insistí un poco porque hasta ese momento no sabía que agrupando por varios campos no se mezclaban los registros y quería saber si existía alguna manera especial de hacer lo que pretendía.

Claro, cuando Lepe me dijo:

Cita:
Es que la función de agrupación funciona así y punto.... no hay más vueltas. Si incluyes una función Sum, avg,etc, debes poner todos los demás campos en el group by
,pensé: "entonces es que no se puede y tendré que verlo de otra forma".

Hasta que Ivanzinho me aclaro el otro punto que desconocía.

Gracias por la ayuda, ya que me ha servido para aclarar algunos conceptos que no tenía claros.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #17  
Antiguo 11-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
En casos complejos, se puede usar un Procedimiento almacenado (si tu SGBBDD lo permite).
A las finales lo he resuelto de la forma que me sugirió Ivanzinho, pero de todas maneras lo dicho lo mantengo... lo implementaré con el procedimiento, aunque sólo será para aprendizaje y ocuparlo cuando lo necesite.

Gracias por tu ejemplo, que me servirá para aprenderlo.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #18  
Antiguo 11-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
Pero por eso tienes que agrupar por nombre y código, así se seleccionarán los distintos valores de la tupla (codigo, nombre), es decir, en el ejemplo que pusiste tu (3, Uxía) <> (5, Uxía), por lo que la consulta devolvería dos registros y no sólo uno.

Un saúdo.
Como habrás visto, ya lo he probado y llevas toda la razón. ¡Gracias por aclararme ese punto!

No más por eso dejaré que seas milenario primero...
El que no entiende, haca clic aquí.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #19  
Antiguo 11-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
... Como veis... yo también aprendo de vosotros

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #20  
Antiguo 11-10-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por Gabo Ver Mensaje
No más por eso dejaré que seas milenario primero...
El que no entiende, haca clic aquí.
No te queda otra .

Cita:
Empezado por Gabo Ver Mensaje
Como habrás visto, ya lo he probado y llevas toda la razón. ¡Gracias por aclararme ese punto!
Me alegro que te haya servido.

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
agregar componentes Lucass Varios 10 28-07-2007 02:27:52
problemas agregar una pc con S.O win 98 a una red pollo_c Internet 1 27-02-2007 19:02:28
Como agregar a una lista los nombres de los campos de una consulta. Luis Conexión con bases de datos 2 11-11-2004 21:55:56
Agregar items a un comboBox desde una consulta de MYSQL Juan Carlos Conexión con bases de datos 3 29-05-2004 22:49:09
Quiero saber como agregar una consulta de SQL a un combobox Julio César Varios 4 15-01-2004 13:47:44


La franja horaria es GMT +2. Ahora son las 01:57:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi