20/12/2010, 11:54
|
| | Fecha de Ingreso: abril-2010
Mensajes: 38
Antigüedad: 14 años, 7 meses Puntos: 0 | |
Saldos dinamicos Hola a todos :), estoy aqui porque no le he podido dar solucion al siguiente problema que tengo, me explico un poco.
La idea final es calcular un saldo de productos a una determinada fecha según todas las entradas (tipo_mov =1) versus todas las salidas (tipo_mov =2) que han tenido desde el inicio de los registros (01-11-2010) hasta el dia que quiera consultar, y asi determinar un saldo. Toda la información se encuentra registrada en 1 sola tabla (registros) esta tabla contiene solamente 4 columnas que son las siguientes:
FECHA_REGISTRO, TIPO_MOV, CODIGO, CANTIDAD
En la columna TIPO_MOV solo existen 2 posibilidades entradas ó salidas que son 1 y 2 respectivamente. Ahora mostrare mi ejemplo de una consulta que contiene solo entradas (resultado contiene 2 columna CODIGO, ENTRADAS)
CODIGO ENTRADAS
7229 655.000
7550 61.000
Y PARA LAS SALIDAS
CODIGO SALIDAS
7229 337.000
7230 59.000
7550 62.000
Para ambas ocupe el siguiente codigo
DECLARE @intinicial int, @intfinal int, @fecha_exist_inicial datetime,@fecha_exist_final datetime
set @fecha_exist_inicial = '01-11-2010' set @fecha_exist_final = '20-11-2010'
set @intinicial = '1' set @intfinal = '170319'
SELECT CODIGO, SUM(CANTIDAD) AS ENTRADAS
FROM REGISTROS
WHERE (CODIGO BETWEEN @intinicial AND @intfinal) AND
(FECHA_REGISTRO BETWEEN @fecha_exist_inicial AND @fecha_exist_final) AND (TIPO_MOV =2)
GROUP BY CODIGO
solo cambie de 1 a 2 nada más en el TIPO_MOV
ahora es donde tengo el problema, el cual yo quiero tener ambas en 1 sola linea
que quedaria mas o menos asi las columnas FECHA_SALDO, CODIGO, ENTRADAS, SALIDAS, SALDO
y esto es el resultado de mi consulta que tengo
FECHA_SALDO CODIGO ENTRADAS SALIDAS SALDO
20-11-2010 7229 655.000 337.000 318.000
20-11-2010 7550 61.000 62.000 -1.000
y este es el codigo que ocupo
set dateformat dmy
go
DECLARE @intinicial int, @intfinal int, @fecha_exist_inicial datetime,@fecha_exist_final datetime
set @fecha_exist_inicial = '01-11-2010' set @fecha_exist_final = '20-11-2010'
set @intinicial = '1' set @intfinal = '170319'
SELECT @fecha_exist_final AS FECHA_SALDO, REGISTROS.CODIGO, SUM(REGISTROS.CANTIDAD) AS ENTRADAS, SALIDAS.SALIDAS AS SALIDAS,
SUM(REGISTROS.CANTIDAD) - SALIDAS.SALIDAS AS SALDO
FROM REGISTROS INNER JOIN
(SELECT CODIGO, SUM(CANTIDAD) AS SALIDAS
FROM REGISTROS AS REGISTROS_1
WHERE (CODIGO BETWEEN @intinicial AND @intfinal) AND (FECHA_REGISTRO BETWEEN @fecha_exist_inicial AND @fecha_exist_final) AND
(TIPO_MOV = 2)
GROUP BY CODIGO) AS SALIDAS ON SALIDAS.CODIGO = REGISTROS.CODIGO
WHERE (REGISTROS.CODIGO BETWEEN @intinicial AND @intfinal) AND (REGISTROS.FECHA_REGISTRO BETWEEN @fecha_exist_inicial AND
@fecha_exist_final) AND (REGISTROS.TIPO_MOV = 1)
GROUP BY REGISTROS.CODIGO, SALIDAS.SALIDAS
Pero como se bien, esta consulta me muestra la coincidencias de ambos codigos (lo cual con lo que quiero esta mala, porque no importa si esta en 1 el TIPO_MOV ó 2, la la idea es que me lo muestre =), en los tipos de movimientos (TIPO_MOV), Pero lo que quiero es que me muestre el codigo 7230 que tiene 59 de salidas, entoces su saldo seria -59
y el resultado de la consulta que QUIERO seria de la siguiente forma incluyendo el codigo 7230
FECHA_SALDO CODIGO ENTRADAS SALIDAS SALDO
20-11-2010 7229 655.000 337.000 318.000
20-11-2010 7550 61.000 62.000 -1.000
20-11-2010 7230 0 59 -59.000
obs. tambien lo he intentado con FULL OUTER JOIN y nada
Bueno espero haberme explicado bien, saludos y gracias de antemano. |