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 05-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 21
judoboy Va por buen camino
Consultas Anidadas o Maestro/Detalle?

Hola quiero hacer una consulta anidada, y no se muy bien como hacerlo.

YO hago lo siguiente realizo una consulta, ej:busco unas actividades, y luego de estas actividades me interesa saber el total de horas que se han realizado, y para ello hago esto

Una 1ª Query donde busco las Actividades, y después una 2ª Query donde busco las horas de las actividades encontradas en la 1ª Query.
Para ello en el DataSource de la 2ª Query le meto el DataAccess que esta relacionado con la 1ª Query. Y en la 2ª query hago referencia al campo que enlaza ambas Querys (relación maestro/detalle) mediante un parametro en la cláusula WHERE.

Pero pasa lo siguiente:
La 1ª Query me muestra todas las ACtividades que busco, pero en la 2ª Query sólo me muestra las horas de la primera Actividad.
Responder Con Cita
  #2  
Antiguo 05-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Podrias poner los campos de las tablas y como se relacionan entre ellas? Asi podriamos mirar de hacer el SQL
Responder Con Cita
  #3  
Antiguo 05-05-2003
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Hola,

como te dice cadetill lo mejor que puedes hacer explicar un poco más sobre tus tablas, ya que será más fácil obtener una solución.

En primer lugar es normal que el usar 2 queries ligadas por el DataSource del detalle no te sirva para tu caso concreto. El DataSource de un Query te permite simular un maestro/detalle, pero parece que lo que tu necesitas es algo más que eso.

A grosso modo, el SQL debería ser algo así:

Código:
select campo1, ... , campoN, 
(select sum(Horas) 
 from TablaHoras H
 where H.Actividad = A.Actiidad)
from Actividades A
Eso es un esquema muy abstracto, pero de lo que se trata es que haces una subconsulta, y en esa subconsulta debes establecer una condición where que te permita seleccionar solamente los registros de la tabla de horas correspondientes al registro actual del query principal.

Espero que se entienda y que te sirva

Saludos.
Responder Con Cita
  #4  
Antiguo 05-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 21
judoboy Va por buen camino
Os comento un poco mejor.

Tengo una tablas Parte_Trabajo, Lin_Parte_Trabajo, Obra y Actividad.

Y yo quiero obtener el total de horas de todas las Actividades en
que se han realizado en una cierta Obra.

En Parte Trabajo, almaceno un campo Obra que es una Clave Ajena a la tabla Obra.
En la tabla Lin_Parte_Trabajo, relaciono dicha tabla con Parte Trabajo mediante un campo llamado PARTE, y otro campo Actividad para relacionar con la table Actividad.
Responder Con Cita
  #5  
Antiguo 05-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
a ver si te sirve esto

Código:
select sum(horas)
from parte p, linParte l, actividad a
where o.obra = 'Obra que quiero' and
       l.parte = p.parte and
       a.actividad = l.actividad
donde Obra que quiero es la obra de la que quieras sumar las horas de actividad
Responder Con Cita
  #6  
Antiguo 05-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 21
judoboy Va por buen camino
Gracias por vuestras respuestas.

Cadetill como tu dices obtengo las horas totales de cada actividad, pero es que yo quiero que me muestre el nombre de la actividad y las horas totales.


y esto no puedo hacerlo SELECT A.NOMBRE, SUM(LP.HORA_TOTAL) AS SUMA FROM ACTIVIDADES A,...
Responder Con Cita
  #7  
Antiguo 05-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
si nombre pertenece a la tabla Actividad por qué no puedes hacerlo???? Te da algún tipo de error??
Responder Con Cita
  #8  
Antiguo 05-05-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
jejejeje, claro que te da un error

debes añadir al SQL una clausula Group By

Código:
select a.nombre, sum(horas)
from parte p, linParte l, actividad a
where o.obra = 'Obra que quiero' and
       l.parte = p.parte and
       a.actividad = l.actividad
group by a.nombre
En que estaria pensando al contestarte!!!! :P
Responder Con Cita
  #9  
Antiguo 05-05-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Poder: 21
judoboy Va por buen camino
Thumbs up

Perfecto, muchas gracias, era eso que faltaba la cláusula Group By.

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
Consultas SQL V.S. Consultas Clipper AGAG4 SQL 7 20-12-2005 15:59:31
consultas anidadas: group by dentro otro group by DobleSiete SQL 7 31-01-2005 14:59:31
Error en consultas SQL con controles ADO Tecnic2 SQL 2 21-09-2004 11:22:41
Consultas anidadas en procedimientos almacenados Choclito Firebird e Interbase 7 18-07-2004 22:06:33
Consultas anidadas jmselesan Firebird e Interbase 1 08-08-2003 16:20:08


La franja horaria es GMT +2. Ahora son las 22:41:01.


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