Ayuda con esto por favor

10/04/2004 - 16:33 por julio | Informe spam
Hola Grupo

Tengo una tabla y siguiera lo siguiente

ConsumoID Fecha ClienteID Consumo Total
1 01/01/04 1 0 0
2 01/02/04 1 75 75
3 01/03/04 1 100 25
4 01/01/04 2 0 0
5 01/02/04 2 60 60
5 01/03/04 2 80 20

Quiero tener el campo total calculado, es decir que me reste el consumo del
mes anterior del mes actual.
Aqui suponemos que iniciara en el mes 01/010/01 en '0' por lo tanto el total
es igual a cero, luego en el mes 01/02/04 el total es igual a 75 porque
75 -0 = 0, luego en la fecha 01/03/04 el total es igual a 25 ya que 100-75
%
Donde el clienteID tiene que ser igual al clienteID

Lo que este cliente consume en un mes se le factura a ese mes y lo que
consume el proximo mes es igual a ese mes menos el mes anterior y este es el
monto al cual se le facturara el mes.

Javier Loria me estuvo ayudando con esto y me envio lo siguiente:

CREATE VIEW ClienteConsumoMensual
AS
SELECT Tabla.ConsumoId
, Tabla.Fecha
, Tabla.ClienteId
, Tabla.Consumo
, Tabla.Consumo-COALESCE(Anterior.Consumo,0) AS Total
FROM Tabla
LEFT JOIN Tabla AS Anterior
ON Tabla.FechaÚTEADD(mm,1,Anterior.Fecha)
AND Tabla.ClienteID=Anterior.ClienteID


Esto funciona a la perfección, ahora estuve
asiendo prueba y veo que tienen que coincidir el mes actual con el mes
pasado en cuanto a días y mes, pero tengo un problema que si en el mes
presente se hace un insert con un día de diferencia del mes anterior no
realiza la resta, es decir resta el valor actual por cero donde debería ser
no por cero sino por el valor anterior.

Siempre el campo Consumo tendra un valor mayor Mes tras mes.
Estuve probando asiendo un select Max(consumo) por cliente y implementando
un trigger instead of insert
pero esto no me sale.
 

Leer las respuestas

#1 Rodriguez
12/04/2004 - 16:22 | Informe spam
Hola grupo

Quiero ver si me pueden ayudar a reparar este codigo, tengo el siguiente
codigo

Create view TotalConsumo
AS
select ConsumoID,fecha,clienteid,Energia, Energia -
isnull ((select Energia from Consumo a
where a.ConsumoID (select max(ConsumoID) from Consumo b
where b.ConsumoID < c.ConsumoID) and a.clienteid = c.clienteid),0) 'total'
from Consumo c

Este codigo funciona bien siempre y cuando el clienteId vaya en orden, pero
si el clienteID no llava el orden es decir group by no funciona

De esta manera funciona bien

ConsumoID Fecha ClienteID Consumo Total
1 01/01/04 1 100 100
2 01/02/04 1 120 20
3 01/03/04 1 150 30
4 01/01/04 2 0 0
5 01/02/04 2 60 60
5 01/03/04 2 80 20


Pero de esta manera no, lo pone de la siguiente manera

ConsumoID Fecha ClienteID Consumo Total
1 01/01/04 1 100 100
2 01/02/04 2 75 75
3 01/03/04 1 120 120
4 01/01/04 2 300 300
5 01/02/04 1 400 400
5 01/03/04 2 500 500




"julio" wrote in message
news:%
Hola Grupo

Tengo una tabla y siguiera lo siguiente

ConsumoID Fecha ClienteID Consumo Total
1 01/01/04 1 0 0
2 01/02/04 1 75 75
3 01/03/04 1 100 25
4 01/01/04 2 0 0
5 01/02/04 2 60 60
5 01/03/04 2 80 20

Quiero tener el campo total calculado, es decir que me reste el consumo


del
mes anterior del mes actual.
Aqui suponemos que iniciara en el mes 01/010/01 en '0' por lo tanto el


total
es igual a cero, luego en el mes 01/02/04 el total es igual a 75 porque
75 -0 = 0, luego en la fecha 01/03/04 el total es igual a 25 ya que 100-75
%
Donde el clienteID tiene que ser igual al clienteID

Lo que este cliente consume en un mes se le factura a ese mes y lo que
consume el proximo mes es igual a ese mes menos el mes anterior y este es


el
monto al cual se le facturara el mes.

Javier Loria me estuvo ayudando con esto y me envio lo siguiente:

CREATE VIEW ClienteConsumoMensual
AS
SELECT Tabla.ConsumoId
, Tabla.Fecha
, Tabla.ClienteId
, Tabla.Consumo
, Tabla.Consumo-COALESCE(Anterior.Consumo,0) AS Total
FROM Tabla
LEFT JOIN Tabla AS Anterior
ON Tabla.FechaÚTEADD(mm,1,Anterior.Fecha)
AND Tabla.ClienteID=Anterior.ClienteID


Esto funciona a la perfección, ahora estuve
asiendo prueba y veo que tienen que coincidir el mes actual con el mes
pasado en cuanto a días y mes, pero tengo un problema que si en el mes
presente se hace un insert con un día de diferencia del mes anterior no
realiza la resta, es decir resta el valor actual por cero donde debería


ser
no por cero sino por el valor anterior.

Siempre el campo Consumo tendra un valor mayor Mes tras mes.
Estuve probando asiendo un select Max(consumo) por cliente y implementando
un trigger instead of insert
pero esto no me sale.





Preguntas similares