Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   consulta de dos tablas (https://www.clubdelphi.com/foros/showthread.php?t=20096)

tgsistemas 05-04-2005 23:54:47

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 ??? :confused:

Gracias y saludos a todos/as

Carlosguiland 08-04-2005 18:54:28

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...

Carlosguiland 08-04-2005 21:06:28

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...

maeyanes 08-04-2005 21:13:28

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

tgsistemas 15-04-2005 13:25:59

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.


La franja horaria es GMT +2. Ahora son las 21:39:58.

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