Alterar vista

24/04/2004 - 21:19 por Julio | Informe spam
Hola grupo

Tengo la siguiente vista:

SELECT ConsumoID, Reactiva,
Fecha, ClienteID, Energia,Mes,Año,Reactiva - ISNULL
((SELECT TOP 1 Reactiva
FROM Consumo C2
WHERE C2.clienteid = C1.clienteid AND
C2.fecha < C1.fecha ORDER BY fecha DESC), 0) AS TotalReactiva, Energia -
ISNULL
((SELECT TOP 1 Energia
FROM Consumo C2
WHERE C2.clienteid = C1.clienteid AND
C2.fecha < C1.fecha
ORDER BY fecha DESC), 0) AS total,

(Select MAx(Potencia) From Consumo C2
Where C2.Clienteid = C1.ClienteId)[Max_Potencia]
FROM dbo.Consumo C1


Esta vista me resta el valor del campo energía de un nuevo insert que se
realice y me pone el total de la resta en campo llamado total, ahora bien lo
que quiero es poder decirle que si el valor que se inserta en el campo
energía es menor que el que esta no me realice la resta si no que deje el
valor del insert nuevo



No se si con un case se puede resolver esto.
 

Leer las respuestas

#1 Javier Loria
25/04/2004 - 00:09 | Informe spam
Hola Julio:
Si si podrias, antes podrias querer eliminar las subconsultas para
evitar problemas de desempeno.
Si creas una vista, la sintaxis se simplifica:
CREATE VIEW ConsumoAP -- Buscar Nombre Apropiado
AS
SELECT Consumo.ConsumoID
, Consumo.Reactiva
, Consumo.Fecha
, Consumo.ClienteID
, Consumo.Energia
, Consumo.Mes
, Consumo.Año
, Consumo.Reactiva
, Consumo.Energia
, MAX(Fecha2) AS FechaConsumoAnterior
, MAX(Potencia) AS Max_Potencia
FROM Consumo C1
LEFT JOIN Consumo2 C2
ON C1.ClienteIdÂ.ClienteID
AND C1.Fecha>C2.Fecha
GROUP BY Consumo.ConsumoID
, Consumo.Reactiva
, Consumo.Fecha
, Consumo.ClienteID
, Consumo.Energia
, Consumo.Mes
, Consumo.Año
, Consumo.Reactiva
, Consumo.Energia

Esta vista permite luego crear la consulta como:
SELECT ConsumoAP.ConsumoID
, ConsumoAP.Reactiva
, ConsumoAP.Fecha
, ConsumoAP.ClienteID
, ConsumoAP.Energia
, ConsumoAP.Mes
, ConsumoAP.Año
, ConsumoAP.Reactiva - COALESCE(Consumo.Reactiva, 0)
, CASE
WHEN ConsumoAP.Energia>COALESCE(Consumo.Energia, 0)
THEN ConsumoAP.Energia-COALESCE(Consumo.Energia, 0)
ELSE ConsumoAp.Energia
END AS Total
, ConsumoAP.Max_Potencia
FROM ConsumoAP
LEFT JOIN Consumo
ON ConsumoAp.ClienteId=Consumo.ClienteID
AND ConsumoAp.FechaConsumoAnterior=Consumo.Fecha
Esto asumiendo que ClienteId, Fecha son llave natural primaria (Unica y
No Nulla)
Va sin probar asi que disculpa los errores de sintaxis.
Espero te sirva,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.




"Julio" wrote in message
news:
Hola grupo

Tengo la siguiente vista:

SELECT ConsumoID, Reactiva,
Fecha, ClienteID, Energia,Mes,Año,Reactiva - ISNULL
((SELECT TOP 1 Reactiva
FROM Consumo C2
WHERE C2.clienteid = C1.clienteid AND
C2.fecha < C1.fecha ORDER BY fecha DESC), 0) AS TotalReactiva, Energia -
ISNULL
((SELECT TOP 1 Energia
FROM Consumo C2
WHERE C2.clienteid = C1.clienteid AND
C2.fecha < C1.fecha
ORDER BY fecha DESC), 0) AS total,

(Select MAx(Potencia) From Consumo C2
Where C2.Clienteid = C1.ClienteId)[Max_Potencia]
FROM dbo.Consumo C1


Esta vista me resta el valor del campo energía de un nuevo insert que se
realice y me pone el total de la resta en campo llamado total, ahora bien


lo
que quiero es poder decirle que si el valor que se inserta en el campo
energía es menor que el que esta no me realice la resta si no que deje el
valor del insert nuevo



No se si con un case se puede resolver esto.


Preguntas similares