Problemas al pasar de Access 2007 a SQL Server 2008

Hola estimados:

Muy agradecido por leer mi pregunta.

Tengo un problema al pasar un código de un proceso, desde Access 2007 a SQL Server 2008, ya que no puedo utilizar la sentencia IF en SQL, por lo tanto al revisar ambas tablas de datos, me encuentro con la singularidad de que no son iguales, y debo estar fallando al momento de traspasar los IF que tengo en access al CASE de SQL, adjunto los códigos de ambos para ver si me pueden ayudar:

Código Access:

SELECT [Base].[ID], ([Base].[FACT]-[Base].[FANT]) AS Periodo, ([Base].[FIS_KWH_BSE]+[Base].[FIS_KWH_INV])/Periodo AS Dia_KWH,
IIf([FANT]<=40756 And [FACT]>40756 And [FANT]<=40786 And [FACT]>40786,Dia_KWH*(Day(40786)),
IIf([FANT]<=40756 And [FACT]>40756,Dia_KWH*([FACT]-40756),
IIf([FANT]<=40786 And [FACT]>40786,Dia_KWH*(40786-[FANT]+1),
IIf([FANT]>40756 And [FACT]>40756 And [FANT]<40786 And [FACT]<=40786,Dia_KWH*Periodo,0)))) AS Ago_11_KWH,
IIf([FANT]<=40787 And [FACT]>40787 And [FANT]<=40816 And [FACT]>40816,Dia_KWH*(Day(40816)),IIf([FANT]<=40787 And [FACT]>40787,Dia_KWH*([FACT]-40787),IIf([FANT]<=40816 And [FACT]>40816,Dia_KWH*(40816-[FANT]+1),IIf([FANT]>40787 And [FACT]>40787 And [FANT]<40816 And [FACT]<=40816,Dia_KWH*Periodo,0)))) AS Sep_11_KWH, IIf([FANT]<=40817 And [FACT]>40817 And [FANT]<=40847 And [FACT]>40847,Dia_KWH*(Day(40847)),IIf([FANT]<=40817 And [FACT]>40817,Dia_KWH*([FACT]-40817),IIf([FANT]<=40847 And [FACT]>40847,Dia_KWH*(40847-[FANT]+1),IIf([FANT]>40817 And [FACT]>40817 And [FANT]<40847 And [FACT]<=40847,Dia_KWH*Periodo,0)))) AS Oct_11_KWH, IIf([FANT]<=40848 And [FACT]>40848 And [FANT]<=40877 And [FACT]>40877,Dia_KWH*(Day(40877)),IIf([FANT]<=40848 And [FACT]>40848,Dia_KWH*([FACT]-40848),IIf([FANT]<=40877 And [FACT]>40877,Dia_KWH*(40877-[FANT]+1),IIf([FANT]>40848 And [FACT]>40848 And [FANT]<40877 And [FACT]<=40877,Dia_KWH*Periodo,0)))) AS Nov_11_KWH, IIf([FANT]<=40878 And [FACT]>40878 And [FANT]<=40908 And [FACT]>40908,Dia_KWH*(Day(40908)),IIf([FANT]<=40878 And [FACT]>40878,Dia_KWH*([FACT]-40878),IIf([FANT]<=40908 And [FACT]>40908,Dia_KWH*(40908-[FANT]+1),IIf([FANT]>40878 And [FACT]>40878 And [FANT]<40908 And [FACT]<=40908,Dia_KWH*Periodo,0)))) AS Dic_11_KWH, IIf([FANT] <= 40909 and [FACT] > 40909,IIf([FANT] < 40939 and [FACT] >= 40939, Dia_KWH * (Day(40939)), Dia_KWH * ([FACT] - 40909)),IIf([FANT] <= 40939 and [FACT] > 40939, IIf([FANT] > 40909 and [FACT] > 40909, Dia_KWH * Periodo, Dia_KWH * (40939 - [FANT] + 1)), 0)) AS Ene_11_KWH
FROM Base
WHERE ((([Base].[NIS]) Not In (3032208,3032209,3032210,3032211,3032212,3032213,3032214,3032216,3032217,3032218,3032219,3032220,3032221,3032222,3032223,3032224,3032226,3039437))) And [base].[imp_transf]<>0;

Cabe señalar que como proceso de prueba , cambié el formato de la fecha a número, por eso las comparaciones están hechas a base de números

Código SQL:

/*0_energia_base*/
declare @fecha_inicio1 datetime, @fecha_fin1 datetime
declare @fecha_inicio2 datetime, @fecha_fin2 datetime
declare @fecha_inicio3 datetime, @fecha_fin3 datetime
declare @fecha_inicio4 datetime, @fecha_fin4 datetime
declare @fecha_inicio5 datetime, @fecha_fin5 datetime
declare @fecha_inicio datetime, @fecha_fin datetime
set @fecha_inicio='20120101'
set @fecha_fin='20120131'
set @fecha_inicio1='20111201'
set @fecha_fin1='20111231'
set @fecha_inicio2='20111101'
set @fecha_fin2='20111130'
set @fecha_inicio3='20111001'
set @fecha_fin3='20111031'
set @fecha_inicio4='20110901'
set @fecha_fin4='20110930'
set @fecha_inicio5='20110801'
set @fecha_fin5='20110831'
SELECT b.[ID],
/*
IF (convert(datetime,b.[FANT])<=@fecha_inicio5 And convert(datetime, b.[FACT])>@fecha_inicio5 And convert(datetime,b.[FANT])<=@fecha_fin5 And convert(datetime, b.[FACT])>@fecha_fin5,
BEGIN
((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(Day(@fecha_fin5)),0)
END
*/
(case
when convert(datetime,b.[FANT])<=@fecha_inicio5 And convert(datetime, b.[FACT])>@fecha_inicio5 And convert(datetime,b.[FANT])<=@fecha_fin5 And convert(datetime, b.[FACT])>@fecha_fin5 then ((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(Day(@fecha_fin5))
when convert(datetime,b.[FANT])<=@fecha_inicio5 And convert(datetime, b.[FACT])>@fecha_inicio5 then ((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(convert(float,convert(datetime, b.[FACT])-@fecha_inicio5))
when convert(datetime,b.[FANT])<=@fecha_fin5 And convert(datetime, b.[FACT])>@fecha_fin5 then ((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(convert(float,@fecha_fin5-dateadd(day,1,convert(datetime,b.[FANT]))))
when convert(datetime,b.[FANT])>@fecha_inicio5 And convert(datetime, b.[FACT])>@fecha_inicio5 And convert(datetime,b.[FANT])<@fecha_fin5 And convert(datetime, b.[FACT])<=@fecha_fin5 then (convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))
else 0 end)as Mes_1,
(case
when convert(datetime,b.[FANT])<=@fecha_inicio4 And convert(datetime, b.[FACT])>@fecha_inicio4 And convert(datetime,b.[FANT])<=@fecha_fin4 And convert(datetime, b.[FACT])>@fecha_fin4 then ((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(Day(@fecha_fin4))
when convert(datetime,b.[FANT])<=@fecha_inicio4 And convert(datetime, b.[FACT])>@fecha_inicio4 then ((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(convert(float,convert(datetime, b.[FACT])-@fecha_inicio4))
when convert(datetime,b.[FANT])<=@fecha_fin4 And convert(datetime, b.[FACT])>@fecha_fin4 then ((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(convert(float,@fecha_fin4-dateadd(day,1,convert(datetime,b.[FANT]))))
when convert(datetime,b.[FANT])>@fecha_inicio4 And convert(datetime, b.[FACT])>@fecha_inicio4 And convert(datetime,b.[FANT])<@fecha_fin4 And convert(datetime, b.[FACT])<=@fecha_fin4 then (convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))
else 0 end)as Mes_2,
(case
when convert(datetime,b.[FANT])<=@fecha_inicio3 And convert(datetime, b.[FACT])>@fecha_inicio3 And convert(datetime,b.[FANT])<=@fecha_fin3 And convert(datetime, b.[FACT])>@fecha_fin3 then ((convert(float,b.[FIS_KWH_BSE])+convert(float,b.[FIS_KWH_INV]))/convert(float,(convert(datetime,b.[FACT])-convert(datetime,b.[FANT]))))*(Day(@fecha_fin3))
when convert(datetime,b.[FANT])<=@fecha_inicio3 And convert(datetime,...

Añade tu respuesta

Haz clic para o