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-04-2005
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
consulta de dos tablas

Hola a todos/as :

Trabajo con D5 y SQL y agradeceria si alguien puede ayudarme con una consulta sobre dos tablas.
Ejecuto la siguiente consulta :
Código:
SELECT TODOP.* 
FROM (SELECT TP.NMROORDEN, SUM(TP.HT) AS HTRBJDAS
	FROM (SELECT PARTES.CDGOTOP, PARTES.NMROORDEN, PARTESLIN.HT
		FROM PARTES INNER JOIN
			PARTESLIN ON PARTES.CDGO = PARTESLIN.CDGOPARTE INNER JOIN
			TPLGIASHORAS ON PARTESLIN.TPLGIA = TPLGIASHORAS.CDGO
		WHERE (PARTES.CDGOTOP = 138 AND PARTES.FECHA BETWEEN '01/01/05' AND '31/01/05' AND TPLGIASHORAS.PREDINFPROD = 1)
		) AS TP
GROUP BY TP.NMROORDEN) AS TODOP

SELECT TODOV.* 
FROM (SELECT TV.NMROORDEN, SUM(TV.HORASVAC) AS HVCCNES
	FROM (SELECT VCCNES.TRBJDOR, VCCNES.NMROORDEN, VCCNES.HORASVAC
		FROM VCCNES
		WHERE (VCCNES.TRBJDOR = 138 AND VCCNES.FECHADESDE BETWEEN '01/01/05' AND '31/01/05')
		) AS TV
GROUP BY TV.NMROORDEN) AS TODOV
obtengo el resultado siguiente :

Código:
NMROORDEN HTRBJDAS
A1C21P0 94
NMROORDEN HVCCNES
A1C21P0 8
El problema es que necesito obtener el dato HVCCNES como una columna más de la primera consulta y no se como hacerlo.
Alguien podria indicarme por donde empezar ???

Gracias y saludos a todos/as
__________________
Toni | blog
Responder Con Cita
  #2  
Antiguo 08-04-2005
Carlosguiland Carlosguiland is offline
Miembro
 
Registrado: abr 2004
Posts: 35
Poder: 0
Carlosguiland Va por buen camino
Hasta, ahora lo mas que puedo recomendarte es que hagas una union, solo trata de seleccionar un campo mas para que te distinga los datos de la primera consulta con la otra..

Saludos...
Responder Con Cita
  #3  
Antiguo 08-04-2005
Carlosguiland Carlosguiland is offline
Miembro
 
Registrado: abr 2004
Posts: 35
Poder: 0
Carlosguiland Va por buen camino
Hasta, ahora lo mas que puedo recomendarte es que hagas una union, solo trata de seleccionar un campo mas para que te distinga los datos de la primera consulta con la otra..

Saludos...
Responder Con Cita
  #4  
Antiguo 08-04-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
No se que motor de bases de datos estás usando, pero puedes probar haciendo algo como esto:

Código SQL [-]
select campo1, campo2, (select campo from tabla2 where condición) as campo3
from tabla1 where condición
Responder Con Cita
  #5  
Antiguo 15-04-2005
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Thumbs up Posible solución

Saludos a tod@s :

Ante todo dar las gracias a las respuestas recibidas y pedir disculpas por tardar tanto en publicar una posible solución.
Tras varias pruebas conseguí el resultado con la siguiente consulta :
Código:
 
SELECT TODO.*, (TODO.HTRAB + TODO.HVAC) AS HTOTAL
FROM (SELECT TLPRDOR, NMROORDEN,
	SUM(CASE (TODOTONI.TABLA) WHEN 'TRA' THEN HORAS ELSE 0 END) AS HTRAB,
	SUM(CASE (TODOTONI.TABLA) WHEN 'VAC' THEN HORAS ELSE 0 END) AS HVAC
	FROM
		(	
		SELECT TODOP.* 
		FROM (SELECT TP.CDGOTOP AS TLPRDOR, TP.NMROORDEN, SUM(TP.HT) AS HORAS, 'TRA' AS TABLA
			FROM (SELECT PARTES.CDGOTOP, PARTES.NMROORDEN, PARTESLIN.HT
				FROM PARTES INNER JOIN
					PARTESLIN ON PARTES.CDGO = PARTESLIN.CDGOPARTE INNER JOIN
					TPLGIASHORAS ON PARTESLIN.TPLGIA = TPLGIASHORAS.CDGO
				WHERE (PARTES.FECHA BETWEEN '01/03/05' AND '31/03/05' AND TPLGIASHORAS.PREDINFPROD = 1)
				) AS TP
		GROUP BY TP.CDGOTOP, TP.NMROORDEN) AS TODOP
	
		UNION

		SELECT TODOV.* 
		FROM (SELECT TV.TRBJDOR AS TLPRDOR, TV.NMROORDEN, SUM(TV.HORASVAC) AS HORAS, 'VAC' AS TABLA
			FROM (SELECT VCCNES.TRBJDOR, VCCNES.NMROORDEN, VCCNES.HORASVAC
				FROM VCCNES
				WHERE (VCCNES.FECHADESDE BETWEEN '01/03/05' AND '31/03/05')
				) AS TV
		GROUP BY TV.TRBJDOR, TV.NMROORDEN) AS TODOV
		) AS TODOTONI
GROUP BY TLPRDOR, NMROORDEN) AS TODO
ORDER BY TLPRDOR, NMROORDEN
No tengo mucha experiencia con SQL, seguramente el codigo es optimizable , pero los resultados obtenidos son los que necesitaba.

Gracias de nuevo a tod@s y saludos.
__________________
Toni | blog
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


La franja horaria es GMT +2. Ahora son las 17:34: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