SQL - Ayuda: Mejoras a mi Query

 
Vista:

Ayuda: Mejoras a mi Query

Publicado por Juan Banana (1 intervención) el 30/11/2011 03:26:51
hola, soy estudiante de sistemas y necesito ayuda para mejorar este Query.
Mi maestra insiste en que le falta una optimizacion.

EXEC master.dbo.sp_dropserver @server=N'AccesSource', @droplogins='droplogins'
GO

exec sp_addlinkedserver
@server='AccesSource',
@provider='Microsoft.ACE.OLEDB.12.0',
@srvproduct='OLE DB FOR ACE',
@datasrc='c:\BDD\examen.ACCDB'
GO

alter procedure [dbo].[sp_faltas_ext3]

(@Año int)
as
begin
DECLARE @fecha1 date
Declare @IdEmpleado int, @Fecha_Ini date, @Fecha_Fin date

declare Faltas_cursor CURSOR FOR

select IdEmpleado,FechaInicio,FechaFin
from accessource...detallefalta

create table ##Empleado (IdEmpleado int,FechaFalta date)
open Faltas_cursor


fetch next from Faltas_cursor
into @IdEmpleado,@Fecha_Ini,@Fecha_Fin
while @@FETCH_STATUS=0
begin
set @fecha1=@Fecha_Ini
while (@fecha1<=@Fecha_Fin)
begin
insert into ##Empleado VALUES(@IdEmpleado,@fecha1)
set @fecha1=DATEADD("dd",1,@fecha1)
end
fetch next from faltas_cursor
into @IdEmpleado,@Fecha_Ini,@Fecha_Fin
END

select IdEmpleado,[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],total from
(
select IdEmpleado,month(FechaFalta)as mes,
(select COUNT(month(FechaFalta)) from ##Empleado as v
where v.IdEmpleado=v1.IdEmpleado
and year(v.FechaFalta)=@Año) as total from ##Empleado as v1
where year(fechafalta)=@Año
)piv
PIVOT(count(mes)
FOR mes IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
)as p
order by IdEmpleado

drop table ##Empleado

close Faltas_cursor
deallocate Faltas_cursor
end

se los agradecere mucho.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder