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
  #21  
Antiguo 20-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Eh! Bpascal, estupendísima explicación. Además eres el único que has dado en el clavo.
Yo creo que hemos aprendido todos algo con tu aportación.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #22  
Antiguo 20-01-2009
Bpascal Bpascal is offline
Miembro
 
Registrado: ene 2009
Posts: 14
Poder: 0
Bpascal Va por buen camino
Cita:
Muchas gracias por tu tan clara explicación, pero ocurre algo, al tratar de hacer la consulta en el IBExpert, me arroja un error en la primera linea, No reconoce el campo "C.T_monto_compr", que es el campo de la sumatoria de la tabla compras "sum(Monto_compr) as T_monto_compr".
Revisa bien si es un error de deletreo de nombres, espero que eso sea, el codigo lo probé en MsSql 2005, asegurate que el SELECT donde se resume la tabla de compras esta entre parentesis y que el alias "C" esta DESPUES de cerrar parentesis.

Cita:
y lo ultimo, donde agrego la considion del campo estado de la tabla compras?
ya que son 2 condiciones distintas, 'F' para la suma y 'P' para el count.
En el SELECT donde se resume la tabla compras, toma nota que es muy similar a tu codigo original la diferencia es que el select anidado que utilizabas se movió del select principal y aqui no lleva condiciones.
Responder Con Cita
  #23  
Antiguo 21-01-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Bpascal, lo he verificado varias veces, y no es un problema de deletreo, incluso probe con otro ejemplo utilizando la misma idea y tampoco funciona.

Al parecer Firebird 2.0, no soporta este tipo de consultas.

Podrá ser esto??
Responder Con Cita
  #24  
Antiguo 21-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Pero esto sí debe de 'tragar'
Código SQL [-]
select p.area , P.monto, 
                sum(case when estado = 'F' then monto_compr else 0 end) AS COMPRA,
               count(case when estado = 'P' then 1 else 0 end) AS EXCEDIDA
from presupuesto p inner join compras c on p.empresa=c.empresa and c.area = p.area and c.ano = p.ano
and p.mes = c.mes AND P.EMPRESA = C.EMPRESA AND P.AREA=C.AREA and p.oficina = c.oficina
where p.mes = '1'
and p.ano =   '2009'
and P.empresa = 'emp1'
and p.oficina = '1'
GROUP BY P.AREA, P.MONTO

Date cuenta de que he quitado la función de agregado al campo monto y lo he añadido al group by.

Ya nos contarás.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #25  
Antiguo 22-01-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Amigos, no me funciona para nada. La idea que mas me gusta fue la de Bpascal, pero tampoco resulto, revise que estuviera todo bien escrito, y asi es.

Será que utilizo Firebird 2.0, que no permite este tipo de consultas.

Si es asi que me recomiendan hacer?

Gracias
Responder Con Cita
  #26  
Antiguo 28-01-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Retomando este tema que me tiene bastante afligido, voy a plantear otra pregunta, que de poder encontrar una solucion, se me facilitaria mi problema general.

Presento la consulta SQL que requiero, pero que me arroja un error.

Código SQL [-]
select INGRESO - EGRESO, sum(case when tipo = 'I' THEN CANTIDAD ELSE 0 END) as INGRESO,
sum(case when tipo = 'E' THEN CANTIDAD ELSE 0 END) as EGRESO
from INVENTARIO WHERE EMPRESA = 'EMP1'

Lo que ocurre es que no puedo usar los campos calculos para volver a realizar otrso calculos con ellos.

Como puedo hacer esta consulta de otra manera, lo mas eficiente posible?

Gracias
Responder Con Cita
  #27  
Antiguo 28-01-2009
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Código SQL [-]
select INGRESO - EGRESO, sum( if(tipo = 'I', CANTIDAD,0)) as INGRESO,
sum( if(tipo= 'E', CANTIDAD, 0) ) as EGRESO
from INVENTARIO WHERE EMPRESA = 'EMP1'

No se si la sintaxis de IF sea la misma en FB, pero checale.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #28  
Antiguo 29-01-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Hola pude solucionar mi problema con el siguiente codigo

Código SQL [-]
select i.cod_insum,i.nom_insum, i.unidad, i.CRITICO, i.rotacion,
(sum( iif(M.tipo = 'I', CANTIDAD,0))) as INGRESO,
(sum( iif(M.tipo= 'E',  CANTIDAD,0))) as EGRESO,
((sum( iif(M.tipo = 'I', CANTIDAD,0))) - (sum( iif(M.tipo = 'E', CANTIDAD,0)))) AS SALDO,
((sum( iif(M.tipo = 'I', PRECIO*CANTIDAD,0))) - (sum( iif(M.tipo = 'E', PRECIO*CANTIDAD,0))))/
(IIF((sum( iif(M.tipo = 'I', CANTIDAD,0))) - (sum( iif(M.tipo = 'E', CANTIDAD,0)))=0,1,(
(sum( iif(M.tipo = 'I', CANTIDAD,0))) - (sum( iif(M.tipo = 'E', CANTIDAD,0)))))) AS UNIT_POND,
(((sum( iif(M.tipo = 'I', PRECIO*CANTIDAD,0))) - (sum( iif(M.tipo = 'E', PRECIO*CANTIDAD,0))))/
(IIF((sum( iif(M.tipo = 'I', CANTIDAD,0))) - (sum( iif(M.tipo = 'E', CANTIDAD,0)))=0,1,(
(sum( iif(M.tipo = 'I', CANTIDAD,0))) - (sum( iif(M.tipo = 'E', CANTIDAD,0)))))))*
(((sum( iif(M.tipo = 'I', CANTIDAD,0))) - (sum( iif(M.tipo = 'E', CANTIDAD,0))))) AS SUBTOTAL
 
from insumos i INNER join inventario m
ON I.cod_insum = M.ID
WHERE M.EMPRESA = 'emp'
 AND I.EMPRESA = 'emp'
GROUP BY i.cod_insum,i.nom_insum, i.unidad, i.CRITICO, i.rotacion

Funciona perfecto e instantaneo, el unico problema es que solo me muestra los insumos que tengan algun tipo de movimiento, es decir, que exitan algun registro de ese insumo en particular en la tabla invetario.

La tabla insumos contiene la informacion de todos los insumos existentes, y la tabla inventario todos los movimientos de los insumos (tipo = 'I' si es un ingreso, y tipo = 'E' si es un egreso)

El asunto es que si no hay ningun movimiento (no hay registro de algun insumo en particular en la tabla inventario), no aparece en mi consulta.

Como puedo hacer la consulta para que arroje todos los insumos, incluso aquellos que no tienen moviemiento.

Espero que se haya entendido.

Saludos, y gracias
Responder Con Cita
  #29  
Antiguo 29-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Tendrás que utilizar LEFT JOIN en lugar de INNER JOIN.
No sé cual es la tabla que tienes que poner a cada lado, pero tienes el 50% por cierto de posibilidades de acertar a la primera.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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
Facturación e Inventario silver07 Conexión con bases de datos 49 22-10-2015 19:45:33
SQL inventario mjjj SQL 7 12-12-2008 17:13:29
Aplicacion + Inventario mjjj Varios 8 03-11-2008 15:58:54
Costo de Inventario NickName SQL 4 09-10-2006 06:30:31
Inventario de Hardware vichovi API de Windows 3 03-01-2005 15:35:10


La franja horaria es GMT +2. Ahora son las 14:17:28.


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