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 17-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Unir 2 tablas en una consulta pero con condicion

buenas tardes
ahi va mi problema

tengo 2 tablas
1 de movimientos que llamaremos MOVI
Periodo, Cuenta, DH, MND, Importe
1 de Saldos que llamaremos Saldo
Año, Cuenta, Debe01, Haber01, Debe02, Haber02.... Debe12, Haber12

la consulta que necesito es mas o menos la siguiente

ubicar las cuentas contables que han tenido movimiento en un periodo x, pero a la ves Unirlas con las cuentas que tengan al menos un saldo en los meses anteriores al periodo (tiene saldo si Debe01 - Haber01 + Debe02 - Haber02 + Debe03 - Haber03.... Deben - Habern) es Diferente de 0, donde n es el mes contable menos 1

entonces... he estado haciendo muchas pruebas y no logro el resultado pedido puesto que me jalan todas las cuentas (del movimiento que es correcto), pero tambien todas las del saldo, no tengo ideas para hacer una funcion que me tome la suma de la tabla de saldos y muestre los que son diferentes de cero

Estoy trabajando con Access (Si lo se..... Access), pero tambien con MS SQL SERVER

Alguna idea? que puedas funcionarme al menos en SQL Server?


gracias
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 18-06-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 21-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
no?
a ver te explico

tengo 2 tablas 1 donde estan los movimientos de una cuenta contable y en otra estan los saldos de la misma cuenta, solo que la tabla de saldos tiene 24 campos vale decir

Cita:
Cuenta, Debe01, Haber01, Debe02, Haber02... Debe1, Haber12
eso quiere decir que guarda los saldos de las cuentas de los meses anteriores al mes actual

entonces el query que quiero debe hacer mas o menos esto

1.- identificar las cuentas que tienen movimientos dentro del mes solicitado
2.- identificar las cuentas que en la tabla de saldos el resultado de sumar y restar Debe01+Debe02+Debe03....Debenn(donde nn=mes -1) - Haber01+Haber02+Haber03...habernn(donde nn=mes -1)

Se entiende ahora?

he estado revisando y creo que debo usar Having, armando una cadena sql donde me vaya sumando los campos hasta el mes en cuestion
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 21-06-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Si pones un ejemplo más gráfico del resultado que quieres, se te podría entender mejor. ¿Puedes poner el resultado que esperas obtener, usando valores?


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #5  
Antiguo 21-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
ok con datos
el problema basicamente es sacar los datos de la tabla de saldos porque con los movimientos no hay problema

Ejemplo
datos de la tabla de saldos, solo mostrarte los 4 primeros meses imaginando que estoy en el mes 5

Cita:
Cuenta...Debe01...Haber01...Debe02...Haber02...Debe03...Haber04....
104001....100.00.........0.00.....25.00.......0.00.........0.00.....50.00
104002.......0.00.........0.00.......0.00.......0.00.........0.00.......0.00
104003.......1.00.........0.00.....100.00......0.00.........0.00....200.00
104004......25.00.........0.00........0.00.....0.00..........0.00.....25.00

entonces deberia mostrarme las cuentas
104001 saldo....75.00
104003 saldo.....-99.00

la 104002 y la 104004 no porque la sumatoria del debe-haber da como resultado cero (o)

ahora si me deje entender?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 21-06-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me da la impresion de que el concepto de las tablas no es el idoneo.
Para mi seria mejor asi:
Año, Cuenta, Debe, Haber, PERIODO
Con tus datos quedaria asi:

Cuenta..... Debe....... Haber......PERIODO

104001.....100.00.......0.00........ 01
104002.......0.00.......0.00........ 01
104003.......1.00.......0.00........ 01
104004......25.00.......0.00........ 01

104001......25.00.......0.00........ 02
104002.......0.00.......0.00........ 02
104003.....100.00.......0.00........ 02
104004.......0.00.......0.00........ 02

104001.......0.00......50.00........ 03
104002.......0.00.......0.00........ 03
104003.......0.00.....200.00........ 03
104004.......0.00......25.00........ 03

Sacar datos de aqui seria muy sencillo, por año, periodo, cuenta, debe, haber, sumatorias, etc...
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 21-06-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
entonces deberia mostrarme las cuentas
104001 saldo....75.00
104003 saldo.....-99.00

la 104002 y la 104004 no porque la sumatoria del debe-haber da como resultado cero (o)

ahora si me deje entender?
Puedes crear un campo calculado dentro de la propia consulta (no sé si Access permite esto). Luego filtra con WHERE utilizando ese nuevo campo. Por ejemplo:

Código SQL [-]
/* utilizo la constante "-1" porque supongo que debe01 y debe02 almacenan siempre cantidades positivas */
Select *, ((debe01 + debe02) * -1) + (haber01 + haber01) as saldo_total from ...
where saldo_total <> 0;

Sinceramente tampoco logro entender lo que deseas. Te aconsejo que utilices la técnica "divide y vencerás" si es que no logras comprender la tarea en su totalidad.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 21-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Me da la impresion de que el concepto de las tablas no es el idoneo.
Para mi seria mejor asi:
Año, Cuenta, Debe, Haber, PERIODO
Con tus datos quedaria asi:

Cuenta..... Debe....... Haber......PERIODO

104001.....100.00.......0.00........ 01
104002.......0.00.......0.00........ 01
104003.......1.00.......0.00........ 01
104004......25.00.......0.00........ 01

104001......25.00.......0.00........ 02
104002.......0.00.......0.00........ 02
104003.....100.00.......0.00........ 02
104004.......0.00.......0.00........ 02

104001.......0.00......50.00........ 03
104002.......0.00.......0.00........ 03
104003.......0.00.....200.00........ 03
104004.......0.00......25.00........ 03

Sacar datos de aqui seria muy sencillo, por año, periodo, cuenta, debe, haber, sumatorias, etc...
Saludos
leyendo esto me hago una pregunta....

si el diseño de la tabla de saldos fuese como el que caral propone, entonces tendria 12 registros por cada cuenta y por cada año versus 1 registro por cuenta como lo tengo ahora

alguien podria hacer una comparacion (en espacio) sobre cual opcion es mejor?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #9  
Antiguo 21-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mas o menos lo he solucionado asi...
Código SQL [-]
 
Select Left(M.CUENTA,2) As CNivel, M.CUENTA, M.Libro, M.Voucher, M.RGt, M.Documento, M.FechaDocumento, M.Anexo, M.CCosto, 
M.Mnd, M.Glosa, P.Descripcion, 
iif (M.DH = 'D', M.n_IMP , 0.00) AS DEBE,  
iif (M.DH = 'H', M.n_IMP , 0.00) AS HABER 
from (tblmovimientocontable M
Left Join tblPlanContable P On (P.Empresa = '001' and P.Periodo = '2009' and M.Cuenta = P.Cuenta))
where M.Empresa = '001' and M.Periodo = '200902' order by M.CUENTA, M.FechaDocumento 
Union all
Select Left(S.CUENTA,2) As CNivel, S.CUENTA, '' as libro, '' as voucher, '' as rgt, '' as documento, 
'' as fechadocumento, '' as anexo, '' as ccosto, '' as mnd, 
'' as glosa, '' as descripcion, 0 as debe, 0 as haber 
from tblcuentasaldo S 
where (S.nd_ant00 + S.nd_ant01) - (S.nh_ant00 - S.nh_ant01) <> 0 and nv = '6' 
and S.Cuenta not in (Select Cuenta from tblmovimientocontable where Periodo = '200902') 
order by S.Cuenta

aunque creo que mejor usare having
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #10  
Antiguo 22-06-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Peso, Bites.
Si colocas una tabla con los datos en una linea y otra con los datos como digo y ves cuanto pesa (mg) tendra que ser lo mismo ya que son Bites o Bytes o lo que sea.
es lo mismo:
1,1
Que
1
1
La diferencia que veo es el orden de la tabla, el diseño sera mejor, en mi opinion.
Ademas no se tendra que hacer mucho (sql) para obtener los datos.
No se, digo...
Saludos
__________________
Siempre Novato
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
Consulta con condicion distinta mjjj SQL 6 22-01-2010 16:50:23
Unir dos tablas en interbase Manuel Firebird e Interbase 4 03-12-2007 23:20:33
unir dos tablas djanp Conexión con bases de datos 5 28-11-2007 15:30:06
unir dos tablas en una consulta paradox 7 Jorge Taveras Tablas planas 1 01-03-2005 07:29:24
unir tablas Mario1980 Conexión con bases de datos 8 22-10-2004 10:36:45


La franja horaria es GMT +2. Ahora son las 11:58:00.


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