DATEName

23/02/2006 - 16:21 por nelva | Informe spam
TEngo un procedimiento almacenado que me muestra las reproducciones
(fotocopias) que se hicieron en un periodo determinado,
yo uso datename para mostrar por semana o por mes o por qq.

pero para mostralo para cada caso ( ww, qq, etc) debo hacer un porcedimiento
para cada uno.

podria yo mandarle los parametros del datename a partir de un dato que el
usuario ingrese

Datename(@name,rep_fecha)
CREATE PROCEDURE dbo.PCA_REPRODUCCION_WEEK(@FECHAINI datetime,
@FECHAFIN datetime,
@TIPOREP numeric(10),@tiempo char(2))
AS SELECT CASE WHEN (datename(@tiempo, r.rep_fecha) = 1) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaI, CASE WHEN (datename(@tiempo,
r.rep_fecha) = 2)
THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaII,
CASE WHEN (datename(@tiempo, r.rep_fecha) = 3) THEN
ISNULL(SUM(rt.rts_cantidad), 0)
END AS SemanaIII, CASE WHEN (datename(@tiempo,
r.rep_fecha) = 4) THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaIV,
dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID
FROM dbo.Reproduccion r INNER JOIN
dbo.Rep_TServicio rt ON r.Rep_Id = rt.Rep_Id INNER
JOIN
dbo.Funcionarios ON r.Fun_Id = dbo.Funcionarios.FUN_ID
INNER JOIN
dbo.Direcciones ON dbo.Funcionarios.DIR_ID dbo.Direcciones.DIR_ID
WHERE (rt.Trep_Id = @TIPOREP) AND (r.Rep_Fecha >= @FECHAINI) AND
(r.Rep_Fecha <= @FECHAFIN)
GROUP BY dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID, r.Rep_Fecha
GO

Alma Alicia Gutierrez Garcia
Unidad de Sistemas, CDA.

Preguntas similare

Leer las respuestas

#1 Maxi
23/02/2006 - 17:40 | Informe spam
Una opcion en SQL2000 es usar Sql_dinamico (con todos los riesgos que ello
lleva claro ;-))
En sql2005 podes revisar el comando Pivot


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"nelva" escribió en el mensaje
news:%
TEngo un procedimiento almacenado que me muestra las reproducciones
(fotocopias) que se hicieron en un periodo determinado,
yo uso datename para mostrar por semana o por mes o por qq.

pero para mostralo para cada caso ( ww, qq, etc) debo hacer un
porcedimiento
para cada uno.

podria yo mandarle los parametros del datename a partir de un dato que el
usuario ingrese

Datename(@name,rep_fecha)
CREATE PROCEDURE dbo.PCA_REPRODUCCION_WEEK(@FECHAINI datetime,
@FECHAFIN datetime,
@TIPOREP numeric(10),@tiempo char(2))
AS SELECT CASE WHEN (datename(@tiempo, r.rep_fecha) = 1) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaI, CASE WHEN
(datename(@tiempo,
r.rep_fecha) = 2)
THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaII,
CASE WHEN (datename(@tiempo, r.rep_fecha) = 3) THEN
ISNULL(SUM(rt.rts_cantidad), 0)
END AS SemanaIII, CASE WHEN (datename(@tiempo,
r.rep_fecha) = 4) THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaIV,
dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID
FROM dbo.Reproduccion r INNER JOIN
dbo.Rep_TServicio rt ON r.Rep_Id = rt.Rep_Id INNER
JOIN
dbo.Funcionarios ON r.Fun_Id =
dbo.Funcionarios.FUN_ID
INNER JOIN
dbo.Direcciones ON dbo.Funcionarios.DIR_ID > dbo.Direcciones.DIR_ID
WHERE (rt.Trep_Id = @TIPOREP) AND (r.Rep_Fecha >= @FECHAINI) AND
(r.Rep_Fecha <= @FECHAFIN)
GROUP BY dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID, r.Rep_Fecha
GO

Alma Alicia Gutierrez Garcia
Unidad de Sistemas, CDA.


Respuesta Responder a este mensaje
#2 nelva
23/02/2006 - 17:57 | Informe spam
Yo puedo mostrar la informacion como una tabla de referencia cruzada, con el
Case, me funciona bien.
La pregunta es puedo sustituir datepart por los datos de una variable
@tiempo

Ejemplo;

datename(ww, rep_fecha) por
datename(@tiempo,rep_fecha).
para que el usuario defina como quiere agrupar si por ww, qq, month, year.
desde un formulario de captura.

Gracias
"Maxi" escribió en el mensaje
news:%
Una opcion en SQL2000 es usar Sql_dinamico (con todos los riesgos que


ello
lleva claro ;-))
En sql2005 podes revisar el comando Pivot


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"nelva" escribió en el mensaje
news:%
> TEngo un procedimiento almacenado que me muestra las reproducciones
> (fotocopias) que se hicieron en un periodo determinado,
> yo uso datename para mostrar por semana o por mes o por qq.
>
> pero para mostralo para cada caso ( ww, qq, etc) debo hacer un
> porcedimiento
> para cada uno.
>
> podria yo mandarle los parametros del datename a partir de un dato que


el
> usuario ingrese
>
> Datename(@name,rep_fecha)
> CREATE PROCEDURE dbo.PCA_REPRODUCCION_WEEK(@FECHAINI datetime,
> @FECHAFIN datetime,
> @TIPOREP numeric(10),@tiempo char(2))
> AS SELECT CASE WHEN (datename(@tiempo, r.rep_fecha) = 1) THEN
> ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaI, CASE WHEN
> (datename(@tiempo,
> r.rep_fecha) = 2)
> THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS


SemanaII,
> CASE WHEN (datename(@tiempo, r.rep_fecha) = 3) THEN
> ISNULL(SUM(rt.rts_cantidad), 0)
> END AS SemanaIII, CASE WHEN (datename(@tiempo,
> r.rep_fecha) = 4) THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaIV,
> dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID
> FROM dbo.Reproduccion r INNER JOIN
> dbo.Rep_TServicio rt ON r.Rep_Id = rt.Rep_Id INNER
> JOIN
> dbo.Funcionarios ON r.Fun_Id > > dbo.Funcionarios.FUN_ID
> INNER JOIN
> dbo.Direcciones ON dbo.Funcionarios.DIR_ID > > dbo.Direcciones.DIR_ID
> WHERE (rt.Trep_Id = @TIPOREP) AND (r.Rep_Fecha >= @FECHAINI) AND
> (r.Rep_Fecha <= @FECHAFIN)
> GROUP BY dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID,


r.Rep_Fecha
> GO
>
> Alma Alicia Gutierrez Garcia
> Unidad de Sistemas, CDA.
>
>


Respuesta Responder a este mensaje
#3 nelva
23/02/2006 - 22:27 | Informe spam
Lo he intentado asi, paero me envia el siguiente mensaje: "error converting
the nvarchar value Enero to column of data type int." cuando selecciono 'm'.
ALTER PROCEDURE dbo.PCA_REPRODUCCION_WEEK

(@FECHAINI datetime,

@FECHAFIN datetime,

@TIPOREP numeric(10),

@TIEMPO char(8))

AS

if @tiempo='ww'

BEGIN

SELECT CASE WHEN (datename(ww, r.rep_fecha) = 1) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaI, CASE WHEN (datename(ww,
r.rep_fecha) = 2)

THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaII, CASE WHEN
(datename(ww, r.rep_fecha) = 3) THEN ISNULL(SUM(rt.rts_cantidad), 0)

END AS SemanaIII, CASE WHEN (datename(ww, r.rep_fecha) = 4) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaIV,

dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID

FROM dbo.Reproduccion r INNER JOIN

dbo.Rep_TServicio rt ON r.Rep_Id = rt.Rep_Id INNER JOIN

dbo.Funcionarios ON r.Fun_Id = dbo.Funcionarios.FUN_ID INNER JOIN

dbo.Direcciones ON dbo.Funcionarios.DIR_ID = dbo.Direcciones.DIR_ID

WHERE (rt.Trep_Id = @TIPOREP) AND (r.Rep_Fecha >= @FECHAINI) AND
(r.Rep_Fecha <= @FECHAFIN)

GROUP BY dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID, r.Rep_Fecha

END

if @tiempo='m'

Else

begin

SELECT CASE WHEN (datename(m, r.rep_fecha) = 1) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS semanaI, CASE WHEN (datename(m,
r.rep_fecha) = 2) THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS Febrero, CASE
WHEN (datename(m, r.rep_fecha) = 3) THEN ISNULL(SUM(rt.rts_cantidad), 0)

END AS Marzo, CASE WHEN (datename(mm, r.rep_fecha) = 4) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS Abril, CASE WHEN (datename(m,
r.rep_fecha) = 5) THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS Mayo,

CASE WHEN (datename(m, r.rep_fecha) = 6) THEN ISNULL(SUM(rt.rts_cantidad),
0) END AS Junio,CASE WHEN (datename(m, r.rep_fecha) = 7) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS Julio,

CASE WHEN (datename(m, r.rep_fecha) = 8) THEN ISNULL(SUM(rt.rts_cantidad),
0) END AS Agosto,CASE WHEN (datename(m, r.rep_fecha) =9) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS Septiembre,

CASE WHEN (datename(m, r.rep_fecha) = 10) THEN ISNULL(SUM(rt.rts_cantidad),
0) END AS Octubre,CASE WHEN (datename(m, r.rep_fecha) = 11) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS Noviembre,

CASE WHEN (datename(m, r.rep_fecha) ) THEN ISNULL(SUM(rt.rts_cantidad),
0) END AS Diciembre,dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID

FROM dbo.Reproduccion r INNER JOIN

dbo.Rep_TServicio rt ON r.Rep_Id = rt.Rep_Id INNER JOIN

dbo.Funcionarios ON r.Fun_Id = dbo.Funcionarios.FUN_ID INNER JOIN

dbo.Direcciones ON dbo.Funcionarios.DIR_ID = dbo.Direcciones.DIR_ID

WHERE (rt.Trep_Id = @TIPOREP) AND (r.Rep_Fecha >= @FECHAINI) AND
(r.Rep_Fecha <= @FECHAFIN)

GROUP BY dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID, r.Rep_Fecha

END

"nelva" escribió en el mensaje
news:%
TEngo un procedimiento almacenado que me muestra las reproducciones
(fotocopias) que se hicieron en un periodo determinado,
yo uso datename para mostrar por semana o por mes o por qq.

pero para mostralo para cada caso ( ww, qq, etc) debo hacer un


porcedimiento
para cada uno.

podria yo mandarle los parametros del datename a partir de un dato que el
usuario ingrese

Datename(@name,rep_fecha)
CREATE PROCEDURE dbo.PCA_REPRODUCCION_WEEK(@FECHAINI datetime,
@FECHAFIN datetime,
@TIPOREP numeric(10),@tiempo char(2))
AS SELECT CASE WHEN (datename(@tiempo, r.rep_fecha) = 1) THEN
ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaI, CASE WHEN


(datename(@tiempo,
r.rep_fecha) = 2)
THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS


SemanaII,
CASE WHEN (datename(@tiempo, r.rep_fecha) = 3) THEN
ISNULL(SUM(rt.rts_cantidad), 0)
END AS SemanaIII, CASE WHEN (datename(@tiempo,
r.rep_fecha) = 4) THEN ISNULL(SUM(rt.rts_cantidad), 0) END AS SemanaIV,
dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID
FROM dbo.Reproduccion r INNER JOIN
dbo.Rep_TServicio rt ON r.Rep_Id = rt.Rep_Id INNER
JOIN
dbo.Funcionarios ON r.Fun_Id dbo.Funcionarios.FUN_ID
INNER JOIN
dbo.Direcciones ON dbo.Funcionarios.DIR_ID > dbo.Direcciones.DIR_ID
WHERE (rt.Trep_Id = @TIPOREP) AND (r.Rep_Fecha >= @FECHAINI) AND
(r.Rep_Fecha <= @FECHAFIN)
GROUP BY dbo.Direcciones.DIR_Nombre, dbo.Funcionarios.DIR_ID, r.Rep_Fecha
GO

Alma Alicia Gutierrez Garcia
Unidad de Sistemas, CDA.


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