Tengo una tabla de "nomina por año" ej: nomina2009, nomina2010 ..etc
Cada una de tiene los siguientes campos:
ID
NOMBRE_EMPLEADO
SUELDO
DESCUENTO_ENERO
DESCUENTO_FEBRERO
DESCUENTO_MARZO
DESCUENTO_ABRIL
DESCUENTO_MAYO
DESCUENTO_JUNIO
DESCUENTO_JULIO
DESCUENTO_AGOSTO
DESCUENTO_SEPTIEMBRE
DESCUENTO_OCTUBRE
DESCUENTO_NOVIEMBRE
DESCUENTO_DICIEMBRE
El requerimiento es que en una tabla similar llamada RESUMEN2009 pueda poner un resumen de los descuentos aplicados en el año (ya que cuando piden un prestamo, se les descuenta via nomina mensualmente), esta tabla tendria los campos
ID
MES_DESDE1
MES_HASTA1
DESCUENTO1
MES_DESDE2
MES_HASTA2
DESCUENTO2
MES_DESDE3
MES_HASTA3
DESCUENTO3
Les muestro un ejemplo:
Un empleado en 2009 pidio un prestamo de 1640 pesos a pagar en un año entonces sus descuentos se ven asi:
Dscto_Ene: 149.00
Dscto_Feb: 149.00
Dscto_Mar: 149.00
Dscto_Abr: 149.00
Dscto_May: 149.00
Dscto_Jun: 149.00
Dscto_Jul: 149.00
Dscto_Ago: 149.00
Dscto_Sep: 149.00
Dscto_Oct: 149.00
Dscto_Nov: 150.00
Dscto_Dic: 0.00
El resultado que busco seria algo similara esto:
MES_DESDE1: Enero
MES_HASTA1: Octubre
DESCUENTO1: 149.00
MES_DESDE2: Noviembre
MES_HASTA2: Noviembre
DESCUENTO2: 150.00
MES_DESDE3: Diciembre
MES_HASTA3: Diciembre
DESCUENTO3: 0.00
La idea con la q inicie la consulta fue un CURSOR, que tome el primer renglon y de ahi vaya comparando el valor de enero contra febrero y si son iguales va con marzo y asi suscesivamente. Como se podran imaginar.....lo hice con puros IF y el codigo se hace mas que largo, un aprox de 1000 lineas, ya lo arme y todo, pero al querer ejecutarlo me manda muchos errores, todos dicen los mismo:
Msg 102, Level 15, State 1, Line 48
Incorrect syntax near '{'.
Msg 102, Level 15, State 1, Line 63
Incorrect syntax near '}'.
Les adjunto parte del codigo que hice, ya que no me permite ponerlo completo:
Código:
DECLARE @CLAVE NVARCHAR (30) DECLARE @I INT DECLARE @JUN04 NVARCHAR (10) DECLARE @JUL04 NVARCHAR (10) DECLARE @AGO04 NVARCHAR (10) DECLARE @SEP04 NVARCHAR (10) DECLARE @OCT04 NVARCHAR (10) DECLARE @NOV04 NVARCHAR (10) DECLARE @DIC04 NVARCHAR (10) SET @I = 1 DECLARE RES CURSOR FOR SELECT clave_de_cobro, JUN04, JUL04, AGO04, SEP04, OCT04, NOV04, DIC04 FROM T1991 OPEN RES FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 WHILE @@FETCH_STATUS = 0 BEGIN IF @JUN04 = @JUL04 --1 {IF @JUN04 = @AGO04--2 {IF @JUN04 = @SEP04--3 {IF @JUN04 = @OCT04--4 {IF @JUN04 = @NOV04--5 {IF @JUN04 = @DIC04--6 {UPDATE T1991 SET DSD1 = 'JUN04', HST1 = 'DIC04', DSCT1 = @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04} ELSE {UPDATE T1991 SET DSD1 = 'JUN04', HST1 = 'NOV04', DSCT1 = @NOV04, DSD2 = 'DIC04', HST2 = 'DIC04', DSCT2 = @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 }--CIERRA IF 6 } ELSE {UPDATE T1991 SET DSD1= 'JUN04', HST1= 'OCT04', DSCT1= @OCT04 WHERE clave_de_cobro = CEILING(@CLAVE) IF @NOV04 = @DIC04 {UPDATE T1991 SET DSD2= 'NOV04', HST2= 'DIC04', DSCT2= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) } ELSE {UPDATE T1991 SET DSD2= 'NOV04', HST2= 'NOV04', DSCT2= @NOV04, DSD3= 'DIC04', HST3= 'DIC04', DSCT3= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) } PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 }--CIERRA IF 5 } ELSE {UPDATE T1991 SET DSD1= 'JUN04', HST1= 'SEP04', DSCT1= @SEP04 WHERE clave_de_cobro = CEILING(@CLAVE) IF @OCT04 = @NOV04 {IF @OCT04 = DIC04 {UPDATE T1991 SET DSD2= 'OCT04', HST2= 'DIC04', DSCT2= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 } ELSE {UPDATE T1991 SET DSD2= 'OCT04', HST2= 'NOV04', DSCT2= @NOV04 DSD3= 'DIC04', HST3= 'DIC04', DSCT3= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 } } }--CIERRA IF 4 } ELSE {UPDATE T1991 SET DSD1= 'JUN04', HST1= 'AGO04', DSCT1= @AGO04 WHERE clave_de_cobro = CEILING(@CLAVE) IF @SEP04 = @OCT04 {IF @SEP04 = @NOV04 {IF @SEP04 = @DIC04 {UPDATE T1991 SET DSD2= 'SEP04', HST2= 'DIC04', DSCT2= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 } ELSE {UPDATE T1991 SET DSD2= 'SEP04', HST2= 'NOV04', DSCT2= @NOV04, DSD3= 'DIC04', HST3= 'DIC04', DSCT3= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 } } ELSE {UPDATE T1991 SET DSD2= 'SEP04', HST2= 'OCT04', DSCT2= @OCT04 WHERE clave_de_cobro = CEILING(@CLAVE) IF @NOV04 = @DIC04 {UPDATE T1991 SET DSD3= 'NOV04', HST3= 'DIC04', DSCT3= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 } ELSE {UPDATE T1991 SET DSD3= 'NOV04', HST3= 'NOV04', DSCT3= @NOV04, DSD4= 'DIC04', HST4= 'DIC04', DSCT4= @DIC04 WHERE clave_de_cobro = CEILING(@CLAVE) PRINT @I PRINT 'SE ACTUALIZO LA CLAVE ' + @CLAVE SET @I = @I+1 FETCH NEXT FROM RES INTO @CLAVE, @JUN04, @JUL04, @AGO04, @SEP04, @OCT04, @NOV04, @DIC04 } } } }--CIERRA IF 3 } END CLOSE RES DEALLOCATE RES
Espero me puedan ayudar a encontrar el error o si me sugieren otro metodo mas facil y mas sencillo, se los agradecere muchisimo!
Un saludo colegas