Tu consulta es muy sencilla pero la compilcaste demasiado leyendo 6 veces la tabla para obtener un resultado que puedes sacar con una sola leida a la tabla.
Tambien coincido con Rootk, debes transformar tu varible al tipo de dato que tiene tu campo, y no al reves, porque si hay 6000 registros en tu tabla en lugar de hacer un convert a la variable haces 6000 converts(1 por cada registro) y eso es lo que te esta pegando mas en el tiempo de respuesta de tu consulta.
Te anexo un ejemplo de como deberia quedar si estas utilizando SQL 2000.
Espero te sirva...
Código:
Alter Procedure usp_Sucursales
@fecConsulta varchar(15) -- Suponiendo, segun el script que la fecha viene en formato YYYYMMDD
as
Declare @dFecConsulta datetime
Set @dFecConsulta = convert(datetime, @fecConsulta)
SELECT cCODSUC
,sum (Case When d.cTipo = 'S' Then 1 Else 0 End) TotLlamS
,sum (Case When d.cTipo = 'S' Then nDURACI Else 0 End ) DuracionS
,sum (Case When d.cTipo = 'S' Then nCstLla Else 0 End ) CostoS
,sum (Case When d.cTipo = 'E' Then 1 Else 0 End) TotLlamE
,sum (Case When d.cTipo = 'E' Then nDURACI Else 0 End ) DuracionE
,sum (Case When d.cTipo = 'E' Then nCstLla Else 0 End ) CostoE
FROM DATOS D
Where dfeclla = @dFecConsulta
group by cCodSuc
order by cCodSuc
Saludos a ambos.