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.

Preguntas similare

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.


Respuesta Responder a este mensaje
#2 Julio
25/04/2004 - 01:59 | Informe spam
Gracias Javier por responder, cuando trato de correrlo me dice
Server: Msg 208, Level 16, State 1, Procedure ConsumoAP, Line 3
Invalid object name 'Consumo2'.

"Javier Loria" wrote in message
news:
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.
>
>


Respuesta Responder a este mensaje
#3 Javier Loria
25/04/2004 - 02:14 | Informe spam
Hola Julio:
Disculpa tengo varios errores:
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(C2.Fecha) AS FechaConsumoAnterior
, MAX(Consumo.Potencia) AS Max_Potencia
FROM Consumo
LEFT JOIN Consumo2 AS C2
ON Consumo.ClienteIdÂ.ClienteID
AND Consumo.Fecha>C2.Fecha
GROUP BY Consumo.ConsumoID
, Consumo.Reactiva
, Consumo.Fecha
, Consumo.ClienteID
, Consumo.Energia
, Consumo.Mes
, Consumo.Año
, Consumo.Reactiva
, Consumo.Energia
Prueba a ver si te funciona la creacion de la vista, si te falla seria mucha
molestia mandarme el DDL (Create Table) de la tabla Consumo?
Eso lo obtienes en el Query Analizer sobre la tabla y genera el script de
Create.
Creo que la consulta esta bien.
Espero te funcione,


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:
Gracias Javier por responder, cuando trato de correrlo me dice
Server: Msg 208, Level 16, State 1, Procedure ConsumoAP, Line 3
Invalid object name 'Consumo2'.

"Javier Loria" wrote in message
news:
> 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.
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Julio
25/04/2004 - 02:54 | Informe spam
Gracias javier por mantener la comunicacion,
Aqui esta el script

if exists (select * from dbo.sysobjects where id object_id(N'[dbo].[FK_Facturas_Consumo]') and OBJECTPROPERTY(id,
N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Facturas] DROP CONSTRAINT FK_Facturas_Consumo
GO

if exists (select * from dbo.sysobjects where id object_id(N'[dbo].[Consumo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Consumo]
GO

CREATE TABLE [dbo].[Consumo] (
[ConsumoID] [int] IDENTITY (1, 1) NOT NULL ,
[ClienteID] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[Energia] [decimal](18, 3) NOT NULL ,
[Reactiva] [decimal](18, 3) NULL ,
[Potencia] [decimal](18, 3) NOT 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]))
) ON [PRIMARY]
GO

Este es el error que me muestra al correrlo nuevamente

Server: Msg 208, Level 16, State 1, Procedure ConsumoAP, Line 3
Invalid object name 'Consumo2'.







"Javier Loria" wrote in message
news:
Hola Julio:
Disculpa tengo varios errores:
> 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(C2.Fecha) AS FechaConsumoAnterior
, MAX(Consumo.Potencia) AS Max_Potencia
FROM Consumo
LEFT JOIN Consumo2 AS C2
ON Consumo.ClienteIdÂ.ClienteID
AND Consumo.Fecha>C2.Fecha
GROUP BY Consumo.ConsumoID
, Consumo.Reactiva
, Consumo.Fecha
, Consumo.ClienteID
, Consumo.Energia
, Consumo.Mes
, Consumo.Año
, Consumo.Reactiva
, Consumo.Energia
> Prueba a ver si te funciona la creacion de la vista, si te falla seria


mucha
molestia mandarme el DDL (Create Table) de la tabla Consumo?
Eso lo obtienes en el Query Analizer sobre la tabla y genera el script de
Create.
Creo que la consulta esta bien.
Espero te funcione,


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:
> Gracias Javier por responder, cuando trato de correrlo me dice
> Server: Msg 208, Level 16, State 1, Procedure ConsumoAP, Line 3
> Invalid object name 'Consumo2'.
>
> "Javier Loria" wrote in message
> news:
> > 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.
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Julio
25/04/2004 - 03:27 | Informe spam
Javier disculpa, pero con la reactiva tambien debo hacer lo mismo cuando se
produzca la resta si es menor, al igual que la energia
"Julio" wrote in message
news:ukPZh$
Gracias javier por mantener la comunicacion,
Aqui esta el script

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[FK_Facturas_Consumo]') and OBJECTPROPERTY(id,
N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Facturas] DROP CONSTRAINT FK_Facturas_Consumo
GO

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[Consumo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Consumo]
GO

CREATE TABLE [dbo].[Consumo] (
[ConsumoID] [int] IDENTITY (1, 1) NOT NULL ,
[ClienteID] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[Energia] [decimal](18, 3) NOT NULL ,
[Reactiva] [decimal](18, 3) NULL ,
[Potencia] [decimal](18, 3) NOT 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]))
) ON [PRIMARY]
GO

Este es el error que me muestra al correrlo nuevamente

Server: Msg 208, Level 16, State 1, Procedure ConsumoAP, Line 3
Invalid object name 'Consumo2'.







"Javier Loria" wrote in message
news:
> Hola Julio:
> Disculpa tengo varios errores:
> > > 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(C2.Fecha) AS FechaConsumoAnterior
> , MAX(Consumo.Potencia) AS Max_Potencia
> FROM Consumo
> LEFT JOIN Consumo2 AS C2
> ON Consumo.ClienteIdÂ.ClienteID
> AND Consumo.Fecha>C2.Fecha
> GROUP BY Consumo.ConsumoID
> , Consumo.Reactiva
> , Consumo.Fecha
> , Consumo.ClienteID
> , Consumo.Energia
> , Consumo.Mes
> , Consumo.Año
> , Consumo.Reactiva
> , Consumo.Energia
> > > Prueba a ver si te funciona la creacion de la vista, si te falla seria
mucha
> molestia mandarme el DDL (Create Table) de la tabla Consumo?
> Eso lo obtienes en el Query Analizer sobre la tabla y genera el script


de
> Create.
> Creo que la consulta esta bien.
> Espero te funcione,
>
>
> 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:
> > Gracias Javier por responder, cuando trato de correrlo me dice
> > Server: Msg 208, Level 16, State 1, Procedure ConsumoAP, Line 3
> > Invalid object name 'Consumo2'.
> >
> > "Javier Loria" wrote in message
> > news:
> > > 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.
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida