Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta sobre 2 tablas (https://www.clubdelphi.com/foros/showthread.php?t=55913)

mjjj 01-05-2008 01:26:29

Consulta sobre 2 tablas
 
Area si alguien me puede ayudar un poquito con una consulta SQL.

Código Delphi [-]
Select p.Area, Sum(p.Monto) as Monto, sum(c.monto_compr) as Total from presupuesto p, compras c
where p.Empresa = c.empresa and c.empresa = 'empresa1'
and p.periodo = c.periodo and c.periodo = '2008-04'
GROUP BY AREA

No me tira ningun error, pero no me da los valores que necesito.

Lo que necesito que me entregue es una lista de todas las area de la empresa, con su respectiva suma de presupuesto (monto) y la suma de las compras (monto.compr), en un determinado periodo.

Tengo 2 tablas, que se pueden relacionar por el campo AREA, PERIODO y EMPRESA.

Espero me puedan ayudar

BlueSteel 01-05-2008 03:38:54

Cita:

Empezado por mjjj (Mensaje 283607)
Area si alguien me puede ayudar un poquito con una consulta SQL.


Código Delphi [-]
Select p.Area, Sum(p.Monto) as Monto, sum(c.monto_compr) as Total from presupuesto p, compras c
where p.Empresa = c.empresa and c.empresa = 'empresa1'
and p.periodo = c.periodo and c.periodo = '2008-04'
GROUP BY AREA





No me tira ningun error, pero no me da los valores que necesito.

Lo que necesito que me entregue es una lista de todas las area de la empresa, con su respectiva suma de presupuesto (monto) y la suma de las compras (monto.compr), en un determinado periodo.

Tengo 2 tablas, que se pueden relacionar por el campo AREA, PERIODO y EMPRESA.

Espero me puedan ayudar

Intenta con esto

Código SQL [-]
Select p.Area, Sum(p.Monto) as Monto, sum(c.monto_compr) as Total 
from presupuesto p, compras c
where p.Empresa = c.empresa and c.empresa = 'empresa1'
and c.periodo = '2008-04'
GROUP BY AREA

esta condicion estaba sobrando
Código SQL [-]
p.periodo = c.periodo

Salu2:p:D

alexey1982 01-05-2008 05:18:22

pregunta
 
oigan amigos :confused:, tachenme de inmunda rata ignorante :eek: pero.. me podrian explicar que significa ese dato: la "P" y la "C" es el nombre de la tabla o es alguna convencion de sql.. O_O' (por que ya lo habia visto antes en el curso sql para pollos, que estoy tomando pero en el mendigo libro no explican eso....!!:mad:)
un saludo...:D

BlueSteel 01-05-2008 05:31:15

Cita:

Empezado por alexey1982 (Mensaje 283635)
oigan amigos :confused:, tachenme de inmunda rata ignorante :eek: pero.. me podrian explicar que significa ese dato: la "P" y la "C" es el nombre de la tabla o es alguna convencion de sql.. O_O' (por que ya lo habia visto antes en el curso sql para pollos, que estoy tomando pero en el mendigo libro no explican eso....!!:mad:)
un saludo...:D


Hola

mira si te fijas en la sentencia SQL
Código SQL [-]
Select p.Area, Sum(p.Monto) as Monto, sum(c.monto_compr) as Total 
from presupuesto p, compras c
where p.Empresa = c.empresa and c.empresa = 'empresa1'
and c.periodo = '2008-04'
GROUP BY AREA

tiene declarado
Código SQL [-]
presupuesto p

esto quiere decir que presupuesto se pasará a llamar p...

es como si se pusiera
Código SQL [-]
presupuesto as p
, lo mismo pasa con
Código SQL [-]
compras c
, en donde la Tabla compras se llamará c (pero en la sentencia que se esta ejecutando...)

esto evita el poner el nombre largo y repetirlo en todos los campos..

espero que hayas entendido

Salu2:p:D

alexey1982 01-05-2008 06:02:35

anda amigo steel, si es cierto!! gracias por explicarme!! (que aunque parece muy simple me has despejado de una duda de varios dias haha!! un saludo!)

mjjj 01-05-2008 19:04:24

hola Bluesteel.

Hice lo que me recomendaste, pero esto sigue sin funcionar. Voy a exponer mas detalladamente mi problema.

Tengo 2 tablas, con los siguientes campos:

Tabla 1 (Presupuesto): empresa, area, subarea, periodo, monto....
Tabla 2 (Compras):empresa, area, periodo, monto_compr...

Ejemplo de lo datos de la tabla 1 (Presupuesto):

empresa area subarea periodo monto
empresa1 area1 subarea2 2008-04 1.500
empresa1 area2 subarea2 2008-05 4.000
empresa2 area3 subarea1 2008-03 3.500
empresa2 area1 subarea2 2008-04 7.000
empresa1 area2 subarea3 2008-05 10.000

Ejemplo de lo datos de la tabla 2 (Compras):

empresa area periodo monto_compr
empresa1 area1 2008-04 3.000
empresa1 area2 2008-05 9.000
empresa2 area3 2008-03 15.500
empresa2 area1 2008-04 7.000
empresa1 area2 2008-05 10.000

Esto es lo que ocurre, la tabla 1, presenta los presupuestos asignados alguna area, periodo y empresa en particular, es decir, para la empresa1, area1, subarea2, periodo 2008-04 tiene un monto de 1.500.

En la tabla 2, se presentan un listado de todas las compra de cierta empresa.
Cada compra esta catalogada dentro de cierta area y periodo, y obviamente tiene cierto monto (monto_compr)

Finalmente lo que necesito realizar:

Necesito una consulta que me entregue en tres campos: el area, el presupuesto acumulado (suma), y compras acumuladas (suma), en cierto periodo y empresa en particular.

Por ahora lo que hago es hacerlo por separado, en dos consultas distintas y funciona bien, pero me gustaria obtener esta misma informacion en una sola consulta.

Lo estoy haciendo asi:
Código SQL [-]
Select p.Area, Sum(p.Monto_compr) as Monto
from compras p
where p.empresa = 'empresa1'
 and p.periodo = '2008-04'
GROUP BY AREA
 
 
Select p.Area, Sum(p.monto) as Presupuesto
from presupuesto
where p.empresa = 'empresa1'
 and p.periodo = '2008-04'
GROUP BY AREA

Esto funciona, pero quisiera ver si alguien me puede ayudar para realizar una sola consulta... y asi ahorrar tiempo.

Saludos, gracias.

jcarteagaf 02-05-2008 04:25:03

A ver si esto te sirve:

Código SQL [-]
SELECT P.Area,
  Sum(p.Monto) as Monto,
  sum(c.monto_compr) as Total
FROM presupuesto p
JOIN compras c ON (P.Empresa = c.Empresa and P.Periodo=c.Periodo)
WHERE 
  P.empresa = 'empresa1'
  P.periodo = '2008-04'
GROUP BY P.AREA
ORDER BY P.Area

Saludos

mjjj 04-05-2008 20:34:30

Hola... esta cosa no funciona.

alguna modificacion al codigo SQL:
Código SQL [-]
SELECT P.Area,  Sum(p.Monto) as Monto,  sum(c.monto_compr) as TotalFROM presupuesto pJOIN compras c ON (P.Empresa = 'empresa1' and c.periodo='2008-04')WHERE   P.empresa = 'empresa1'  P.periodo = '2008-04'GROUP BY P.AREAORDER BY P.Area

el tema es que no existe relacion entre las tablas, por lo que no puedo hacer una condicion como c.periodo = p.periodo.... yo creo que por ahi va la solucion, pero no logro encontrarla.

como dijo anteriormente si hago la consulta por separado esto va de maravilla, el problema surge al tratar de obtener la misma informacion en una sola consulta.

lo que necesito es obtener un listado de las distintas areas de la empresa, donde me muestre el presupuesto de estas distintas area y la suma de las compras de estas mismas area.... algo asi:

area presupuesto compras
area1 5.000 1.000
area2 7.000 5.000
area3 9.000 0
area4 3.000 3.000

no se si esto se podra con la forma que estructure mis tablas.... alguna idea del codigo SQL

Saludos... Gracias

mjjj 07-05-2008 14:42:56

Parece que esta medio complicado esto... yo no he podido resolverlo... ojala que alguien se le ocurriera algo y me lo dijera....

me seria de grana ayuda.

Saludos, gracias.


La franja horaria es GMT +2. Ahora son las 00:15:56.

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