Necesito ayuda con esto por favor

26/08/2004 - 18:25 por Julio | Informe spam
Hola grupo

Tengo un problema con algo aqui y quisiera ver si me pueden dar una mano con
esto.

Tengo una tabla llamada Consumo la cual es alimentada por un DTS que
introduce todos los datos en ellas, tengo un caso y es el siguiente.
Cada vez que se haga un insert en la tabla consumo el campo que dice
Potencia de la tabla Consumo sera igual al average de las dos potencia mas
alta en el caso que esta sean mayor que la potencia que se inserto, en caso
de ser menor se queda la
potencia que se inserto.

entonces en la tabla consumo se hace todo el insert sin hacer ninguna
comparacion es decir el campo potencia se inserta tal como viene, luego creo
una vista llamada ConsumoAP para hacer los calculos.

Para que se pueda entende mejor este proyecto es para facturar la energia
electrica consumida por un usuario,como ya saben todos los meses se le cobra
lo que consumieron y si la potencia que consumieron es mayor que las dos mas
alta entonces se le cobra esa, de lo contario se
le cobraria el average.

En la vista ConsumoAP quiero sustituir el select que dice Select
Max(Potencia) por el valor de de lo explicado anteriormente.

Esta son las tablas:

Tabla de consumo :

CREATE TABLE [dbo].[Consumo] (
[ConsumoID] [int] IDENTITY (1, 1) NOT NULL ,
[ClienteID] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[Energia] [decimal](18, 2) NULL ,
[Reactiva] [decimal](18, 2) NULL ,
[Potencia] [decimal](18, 2) NULL ,
[Potencia_punta] [decimal](18, 2) NULL ,
[Mes] AS (case (datepart(month,[fecha])) when '01' then 'Enero' when '02'
then 'Febrero' when '03' then 'Marzo' when '04' then 'Abril' when '05' then
'Mayo' when '06' then 'Junio' when '07' then 'Julio' when '08' then 'Agosto'
when '09' then 'Septiembre' when '10' then 'Octubre' when '11' then
'Noviembre' when '12' then 'Diciembre' end) ,
[Año] AS (datename(year,[fecha])) ,
[FechaInsertacion] [datetime] NULL ,
[Usuario] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

Esta es la vista :

CREATE VIEW ConsumoAP
AS
SELECT Consumo.ConsumoID
, Consumo.Fecha
, Consumo.ClienteID
, Consumo.Mes
, Consumo.Año
, Consumo.Reactiva
, Consumo.Energia
, MAX(C2.Fecha) AS FechaConsumoAnterior

, (Select max(Potencia) From Consumo C2 Where C2.Clienteid Consumo.ClienteId)[Max_Potencia]

, (Select max(Potencia_Punta) From Consumo C2 Where C2.Clienteid Consumo.ClienteId)[Max_PotenciaPunta]
FROM Consumo
LEFT JOIN Consumo AS C2
ON Consumo.ClienteIdÂ.ClienteID
AND Consumo.Fecha>C2.Fecha
GROUP BY Consumo.ConsumoID
, Consumo.Fecha
, Consumo.ClienteID
, Consumo.Mes
, Consumo.Año
, Consumo.Reactiva
, Consumo.Energia



ejemplo


Tabla Consumo

Consumoid ClienteID Fecha Potencia
1 1 01/01/04 5
2 1 01/02/04 10
3 1 01/03/04 6
4 1 01/04/04 7



Vista quedaria asi

Consumoid ClienteID Fecha Potencia
1 1 01/01/04 5
2 1 01/02/04 10
3 1 01/03/04 7.5
4 1 01/04/04 8


Si observa para la fecha 01/04/04 en la tabla consumo la potencia fue igual
a 7, pero la vista tiene 8 ya que el promedio de las dos potencias mas alta
de la tabla consumo fueron igual 8 que es mayor que 7. Lo mismo sucede en la
fecha 01/03/04
 

Leer las respuestas

#1 jose
27/08/2004 - 17:22 | Informe spam
Apoyate en reglas o Triggers.

Reglas son fijas y no puedes meter código anexo, son más
rápidas, Por eje: Si col1 = 1 puedes meter una regla
como co2 = col1 * 2, u otras.

Trigger: Puedes meter código de acuerdo a los datos que
se estan agregando(insertando, actualizando, borrando) en
la tabla, son más lentos.

Preguntas similares