Consultas por Semanas?

07/06/2007 - 17:42 por Ruthenfods Tellez | Informe spam
Tengo esta consulta que me cuenta cuenta los reclamos que hay por semanas,
en una determinada fecha de inicio y de fin.

Select (IsNull(Count(REC_ID),0)) As Numero,DateAdd(day, 2, DateAdd(day, -1 *
datepart(dw, REC_Fecha), REC_Fecha)) As Semana from Reclamo where rec_fecha
between '02/01/2007' and '02/28/2007' and fun_elaborado = 261 GROUP BY
DateAdd(day, 2, DateAdd(day, -1 * datepart(dw, REC_Fecha), REC_Fecha)),
fun_elaborado

El resultado que me da es:

Cantidad Semanas
1 2007-01-29
1 2007-02-12

el problema es de que yo quiero que me presente todas las semanas en ese
periodo y no solo la semana donde encuentre que hubo reclamos, que en la
semanas que no encuentra reclamos me lo ponga en 0, por ejemplo:

1 de la semana 2007-01-29
0 de la semana 2007-02-05
1 de la semana 2007-02-12
0 de la semana 2007-02-19
0 de la semana 2007-02-26

Si podrian ayudarme, gracias.

Saludes.

Preguntas similare

Leer las respuestas

#1 Maxi
07/06/2007 - 21:06 | Informe spam
Hola, entonces deberias tener otra tabla de calendario donde hagas un left
join y si hay nulos que ponga cero, eso lo podes hacer con isnull()


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Ruthenfods Tellez" escribió en el mensaje
news:%23%
Tengo esta consulta que me cuenta cuenta los reclamos que hay por semanas,
en una determinada fecha de inicio y de fin.

Select (IsNull(Count(REC_ID),0)) As Numero,DateAdd(day, 2, DateAdd(day, -1
* datepart(dw, REC_Fecha), REC_Fecha)) As Semana from Reclamo where
rec_fecha between '02/01/2007' and '02/28/2007' and fun_elaborado = 261
GROUP BY DateAdd(day, 2, DateAdd(day, -1 * datepart(dw, REC_Fecha),
REC_Fecha)), fun_elaborado

El resultado que me da es:

Cantidad Semanas
1 2007-01-29
1 2007-02-12

el problema es de que yo quiero que me presente todas las semanas en ese
periodo y no solo la semana donde encuentre que hubo reclamos, que en la
semanas que no encuentra reclamos me lo ponga en 0, por ejemplo:

1 de la semana 2007-01-29
0 de la semana 2007-02-05
1 de la semana 2007-02-12
0 de la semana 2007-02-19
0 de la semana 2007-02-26

Si podrian ayudarme, gracias.

Saludes.



Respuesta Responder a este mensaje
#2 Ruthenfods Tellez
07/06/2007 - 21:47 | Informe spam
No entiendo, explicame como, con un ejemplo.

Gracias, por la ayuda.

"Maxi" escribió en el mensaje
news:
Hola, entonces deberias tener otra tabla de calendario donde hagas un left
join y si hay nulos que ponga cero, eso lo podes hacer con isnull()


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Ruthenfods Tellez" escribió en el mensaje
news:%23%
Tengo esta consulta que me cuenta cuenta los reclamos que hay por
semanas, en una determinada fecha de inicio y de fin.

Select (IsNull(Count(REC_ID),0)) As Numero,DateAdd(day, 2,
DateAdd(day, -1 * datepart(dw, REC_Fecha), REC_Fecha)) As Semana from
Reclamo where rec_fecha between '02/01/2007' and '02/28/2007' and
fun_elaborado = 261 GROUP BY DateAdd(day, 2, DateAdd(day, -1 *
datepart(dw, REC_Fecha), REC_Fecha)), fun_elaborado

El resultado que me da es:

Cantidad Semanas
1 2007-01-29
1 2007-02-12

el problema es de que yo quiero que me presente todas las semanas en ese
periodo y no solo la semana donde encuentre que hubo reclamos, que en la
semanas que no encuentra reclamos me lo ponga en 0, por ejemplo:

1 de la semana 2007-01-29
0 de la semana 2007-02-05
1 de la semana 2007-02-12
0 de la semana 2007-02-19
0 de la semana 2007-02-26

Si podrian ayudarme, gracias.

Saludes.







Respuesta Responder a este mensaje
#3 Maxi
08/06/2007 - 16:35 | Informe spam
Hola, cual es el punto que no entiendes? sabes lo que es una tabla
calendario? es una tabla simplemente con los dias (el horizonte lo armas
vos) por ej

CREATE TABLE CALENDARIO (FECHA DATETIME Primay key, SEMANA INT)
GO

DECLARE @N INT
DECLARE @FECHA DATETIME
SET @FECHA = '20070101'

SET @N = 1

WHILE @N < 900

BEGIN
INSERT INTO CALENDARIO VALUES (@FECHA,DATEPART(WK,@FECHA)
SET @FECHA = @FECHA + 1
SET @N = @N + 1
END

Aca ya tenes las fechas y su semana correspondiente,de tu select haces un
left join contra esta tabla, por ej

select isnull(tutabla.semana,0) as semana, tutabla.campo1,tutabla.campo2
FROM
calendario left join tutabla on
calendario.semana = tutabla.semana


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Ruthenfods Tellez" escribió en el mensaje
news:%
No entiendo, explicame como, con un ejemplo.

Gracias, por la ayuda.

"Maxi" escribió en el mensaje
news:
Hola, entonces deberias tener otra tabla de calendario donde hagas un
left join y si hay nulos que ponga cero, eso lo podes hacer con isnull()


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Ruthenfods Tellez" escribió en el mensaje
news:%23%
Tengo esta consulta que me cuenta cuenta los reclamos que hay por
semanas, en una determinada fecha de inicio y de fin.

Select (IsNull(Count(REC_ID),0)) As Numero,DateAdd(day, 2,
DateAdd(day, -1 * datepart(dw, REC_Fecha), REC_Fecha)) As Semana from
Reclamo where rec_fecha between '02/01/2007' and '02/28/2007' and
fun_elaborado = 261 GROUP BY DateAdd(day, 2, DateAdd(day, -1 *
datepart(dw, REC_Fecha), REC_Fecha)), fun_elaborado

El resultado que me da es:

Cantidad Semanas
1 2007-01-29
1 2007-02-12

el problema es de que yo quiero que me presente todas las semanas en ese
periodo y no solo la semana donde encuentre que hubo reclamos, que en la
semanas que no encuentra reclamos me lo ponga en 0, por ejemplo:

1 de la semana 2007-01-29
0 de la semana 2007-02-05
1 de la semana 2007-02-12
0 de la semana 2007-02-19
0 de la semana 2007-02-26

Si podrian ayudarme, gracias.

Saludes.











email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida