Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Evitas Curosres SQL server

Estas en el tema de Evitas Curosres SQL server en el foro de SQL Server en Foros del Web. bueno antes que nada agradesco la ayuda que me puedan proporcionar tengo un problema con un par de tablas y no he encontrado un solucion ...
  #1 (permalink)  
Antiguo 07/03/2007, 09:09
 
Fecha de Ingreso: marzo-2007
Mensajes: 3
Antigüedad: 17 años, 2 meses
Puntos: 0
Evitas Curosres SQL server

bueno antes que nada agradesco la ayuda que me puedan proporcionar
tengo un problema con un par de tablas y no he encontrado un solucion sin cursores los culaes no quiero utilizar pero si no hay de otr pues nimodo

-----tengo una tabla llmada empleados y otra donde guarada el total que ha ganado por semena llama totalSem quiero sacar el promedio de las ultimas 4 semanas por cada empleado hice una consulta que me trae los ultmios 4 registros pero siolo consegui hacerlo por empleado, "select top 4 total from totalsem where idempleado =455 oreder by tstamp desc" con esto me trae los ultimos cuatro registros de cada empleado pero quiero sacarlos por todos los empleados y solo se me ocurre un cursor que recorra todos los registro de la tabla empleados he ir seleccionado los topes dentro del cursor por empleado---acepto cualquier ayuda , critica o sugerencia

  #2 (permalink)  
Antiguo 07/03/2007, 10:07
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Evitas Curosres SQL server

Que tal k8azo.

Primero, una observación.

La consulta:
Código:
"select top 4 total from totalsem where idempleado =455 oreder by tstamp desc"
Te devuelve los últimos cuatro pagos, no los "pagos" de las últimas cuatro semanas, a mi entender claro.

Lo anterior pensado en que a un empleado quiza sólo le han pagado dos veces en las últimas cuatro semanas.

Sugerencia.

De ser cierto lo anterior podemos hacer lo siguiente:

Código:
DECLARE @FechaIni
-- Obtener fecha de hace 4 semanas.
SET @FechaIni = DateAdd(ww, -4, getdate() ) -- Aquí puede ser -4 ó -5, haz pruebas

-- Obtenemos totales( o promedios)  de las últimas cuatro semanas.
select idempleado, AVG(total) as Prom4  
INTO #tmpProm4
from totalsem 
where  tstamp >= @FechaIni
---------- Lo que esta en color seguramente tienes que hacer una conversión


-- Por último la cruzamos contra los empleados
SELECT e.*, t.Prom4 as Promedio
FROM Empleado e 
            INNER JOIN #tmpProm4 t  ON e.idempleado = t.idempleado

-- borramos la temporal
DROP TABLE #tmpProm4
Si la solución no esta total, va más o menos por ahí.

Saludos y suerte!!
  #3 (permalink)  
Antiguo 07/03/2007, 10:55
 
Fecha de Ingreso: marzo-2007
Mensajes: 3
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Evitas Curosres SQL server

gracias por tu ayuda mira no es tan complicado como parec ya que no tengo que meterme con las fechas ya que cada que se paga s ecaptura manualmente el numero de semana y al terminar el año no se borra nada llegando a la conclusion de que siempre estaran las 4 semanas en caso de que solo tenga menos de un mes se calcula un promedio inicial al darlo de alta y de ahy se agarra el promedio esto q plantie solo aplica a las personas que tengan mas de un mes ya he modificado la consulata aver si se puede hacer algo similar con esto

'SELECT TOP 4 AVG(totalPagado) AS Totales FROM TBLNHistNomina WHERE IdEmpleado = @IdEmp GROUP BY IdEmpleado ORDER BY IdEmpleado DESC'



mira esto hace mi SP y me funciona bien pero lo quiero evitar
CREATE PROCEDURE SPPromedio4sem
--sp que selecccione los 4 ultimos registro de los empleados y los muestre
@parm1 as varchar(2)--idCompania
AS

BEGIN
--cursor
DECLARE @Suma AS FLOAT
DECLARE @IdEmp AS VARCHAR(10)
DECLARE @Prom AS FLOAT
SET @IdEmp = NULL
SET @Prom = NULL
DECLARE C1 CURSOR scroll FOR
SELECT IdEmpleado FROM TBLEmpleados WHERE IdCompania = @Parm1
OPEN C1
FETCH FIRST FROM C1 INTO @IdEmp
WHILE @@FETCH_STATUS = 0
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BEGIN
DECLARE @Total AS FLOAT
DECLARE C2 CURSOR SCROLL FOR --Selecciona los ultimos cuatro registros para el promedio de el mes
SELECT TOP 4 AVG(totalPagado) AS Totales FROM TBLNHistNomina WHERE IdEmpleado = @IdEmp GROUP BY IdEmpleado ORDER BY IdEmpleado DESC
OPEN C2
-----------------------------------------------------------------------------------------------------------------------------------------------------------
FETCH first FROM C2 INTO @Total --C2
WHILE @@FETCH_STATUS =0

BEGIN --C2
INSERT INTO TBLNInsTotal (IdEmpleado, Total) VALUES (@IdEmp,@Total)

FETCH NEXT FROM C2 INTO @Total --C2

END--C2
-----------------------------------------------------------------------------------------------------------------------------------------------------------
CLOSE C2
DEALLOCATE C2


FETCH NEXT FROM C1 INTO @IdEmp --SIGUIENTE CLAVE
END
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--fin cursor
CLOSE C1
DEALLOCATE C1
END
GO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:14.