Agrupar por Fecha.

12/08/2004 - 02:10 por Ruben Dario | Informe spam
Hola amigos.!!

Tengo el siguiente Procedure

El problema que tengo es no tengo un patron de rango de
fecha que relacione las tablas, y no me agrupa por meses.

Como puedo poner un patron o un campo que me ponga el mes
del rango de las tablas que tengo relacionadas con LEFT
JOIN.

Alter Procedure RepFann_Mensual
@Fecha1 datetime,
@Fecha2 datetime,
@PC varchar(15)
As

SELECT Fleteros.Id_Fletero,Fleteros.Nombre as
Fletero,C.Id_Chofer, C.Nombre Chofer,
isnull(sum(Com.Combustibles),0)Combustibles,isnull(Sum
(E.Total-((E.Importe*E.Porc)/100)),0) as Facturas,isnull
(sum(Ent.Gastos),0)Gastos
FROM Choferes C

LEFT JOIN
(SELECT Embanques.Id_Chofer,Sum(Cantidad)Combustibles from
Embanques WHERE Fecha BETWEEN @Fecha1 AND @Fecha2 GROUP BY
Embanques.Id_Chofer)E

ON C.Id_Chofer=E.Id_Chofer

LEFT JOIN(Select Id_Chofer,Sum(Cantidad)Combustibles FROM
Entregas2 WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
GROUP BY Id_Chofer)Com

ON C.Id_Chofer=Com.Id_Chofer

LEFT JOIN(Select Id_Chofer,Sum(Cantidad)Gastos FROM
Entregas WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
GROUP BY Id_Chofer)Ent
ON C.Id_Chofer=Ent.Id_Chofer


INNER JOIN Fleteros
ON C.Id_Fletero=Fleteros.Id_Fletero

INNER JOIN Choferes_Rel
ON C.Id_Chofer=Choferes_Rel.Id_Chofer

WHERE C.Id_Chofer=Choferes_Rel.Id_Chofer AND
Choferes_Rel.NombrePc=@Pc

GROUP BY
Fleteros.Id_Fletero,Fleteros.Nombre,c.Id_Chofer,C.Nombre


Saludos
 

Leer las respuestas

#1 Javier Loria
12/08/2004 - 14:40 | Informe spam
Hola Ruben:
Con las funcion DATEPART y los parametros Year y Month puedes lograrlo
pero no es tan bonito.
=SELECT RIGHT('0'+CAST(DATEPART(Month, GETDATE()) AS VARCHAR(2)),2)
+'-'+CAST(DATEPART(Year, GETDATE()) AS CHAR(4))
= Una alternativa mas simple es con CONVERT:
=SELECT CONVERT(CHAR(6), GETDATE(),112)
= Esta ultima es mucho mas simple pero no es compatible con otros motores
de BD's. Por otra parte esto produce algunos problemas en el uso de indices
y otros, algunos desarrolladores (en estos me incluyo) prefieren tener una
tabla de ayuda que tenga los meses construidos con un inicio y final,
olvidandese de los calculos.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Ruben Dario" wrote in message
news:495b01c48000$cc2ca610$
Hola amigos.!!

Tengo el siguiente Procedure

El problema que tengo es no tengo un patron de rango de
fecha que relacione las tablas, y no me agrupa por meses.

Como puedo poner un patron o un campo que me ponga el mes
del rango de las tablas que tengo relacionadas con LEFT
JOIN.

Alter Procedure RepFann_Mensual
@Fecha1 datetime,
@Fecha2 datetime,
@PC varchar(15)
As

SELECT Fleteros.Id_Fletero,Fleteros.Nombre as
Fletero,C.Id_Chofer, C.Nombre Chofer,
isnull(sum(Com.Combustibles),0)Combustibles,isnull(Sum
(E.Total-((E.Importe*E.Porc)/100)),0) as Facturas,isnull
(sum(Ent.Gastos),0)Gastos
FROM Choferes C

LEFT JOIN
(SELECT Embanques.Id_Chofer,Sum(Cantidad)Combustibles from
Embanques WHERE Fecha BETWEEN @Fecha1 AND @Fecha2 GROUP BY
Embanques.Id_Chofer)E

ON C.Id_Chofer=E.Id_Chofer

LEFT JOIN(Select Id_Chofer,Sum(Cantidad)Combustibles FROM
Entregas2 WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
GROUP BY Id_Chofer)Com

ON C.Id_Chofer=Com.Id_Chofer

LEFT JOIN(Select Id_Chofer,Sum(Cantidad)Gastos FROM
Entregas WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
GROUP BY Id_Chofer)Ent
ON C.Id_Chofer=Ent.Id_Chofer


INNER JOIN Fleteros
ON C.Id_Fletero=Fleteros.Id_Fletero

INNER JOIN Choferes_Rel
ON C.Id_Chofer=Choferes_Rel.Id_Chofer

WHERE C.Id_Chofer=Choferes_Rel.Id_Chofer AND
Choferes_Rel.NombrePc=@Pc

GROUP BY
Fleteros.Id_Fletero,Fleteros.Nombre,c.Id_Chofer,C.Nombre


Saludos

Preguntas similares