Problema con consulta

24/02/2010 - 21:06 por Javier | Informe spam
Hola Gente,
explico: estoy realizando una consulta en la cual se toman dos fechas, y se
hace una consulta a una tabla que tiene dos campos, fechapresentacion y
renuevaa, renuevaa posee 0/null o un valor mayor que 0 (si es 0/null es una
presentacion, si es mayor una renovacion), la consulta debe mostrar por año,
cuantas presentaciones y renovaciones se realizaron y al final el total por
rango
hasta ahora tengo un codigo que pondre al final con unas imagenes que
muestran resultado, el cual posee el error de que funcionan con solo un rango
de fechas, si modifico el rango, la visualizacion de la tabla resultante no
es correcta, aunque el dato total si es correcto

uso sql server 2005

CODIGO:

declare @uno datetime, @dos datetime

set @uno = '20040101'
set @dos = '20101231'

select
TIPOÊSE WHEN renuevaa > 0 then 'RENOVACION' else 'PRESENTACION' end
,total2010=count(CASE WHEN YEAR(fechapresentacion)='2010' THEN 1 ELSE NULL
END)
,total2009=count(CASE WHEN YEAR(fechapresentacion)='2009' THEN 1 ELSE NULL
END)
,total2008=count(CASE WHEN YEAR(fechapresentacion)='2008' THEN 1 ELSE NULL
END)
,total2007 =count(CASE WHEN YEAR(fechapresentacion)='2007' THEN 1 ELSE NULL
END)
,total2006 =count(CASE WHEN YEAR(fechapresentacion)='2006' THEN 1 ELSE NULL
END)
,total2005 =count(CASE WHEN YEAR(fechapresentacion)='2005' THEN 1 ELSE NULL
END)
,total2004 =count(CASE WHEN YEAR(fechapresentacion)='2004' THEN 1 ELSE NULL
END)
,total =count(1)
from marca
where fechapresentacion between @uno and @dos
group by (CASE WHEN renuevaa > 0 then 'RENOVACION' else 'PRESENTACION' end)

Imagen con resultado
http://www.techdevs.cl/Dibujo.PNG

ahora si modifico el rango ..supongamos 2003-2008, la tabla sigue igual
aunque los valores totales cambian
http://www.techdevs.cl/Dibujo2.PNG

especificando mas mi consulta existira alguna manera de hacer que el
resultado de la tabla muestre el rango especificado ?
 

Leer las respuestas

#1 Alejandro Mesa
24/02/2010 - 21:48 | Informe spam
Javier,

Cual version de sql server estas usando?

Parece que deseas crear las columnas de forma dinamica de acuerdo al rango
de las fechas. Es eso lo que deseas?

Si es asi, tendras que acudir a usar una operacion de pivot dinamica.

Para poderte ayudar mejor, preferible que postees la estructura de la tabla,
mas data de ejemplo en forma de sentencias insert.


AMB


"Javier" wrote:

Hola Gente,
explico: estoy realizando una consulta en la cual se toman dos fechas, y se
hace una consulta a una tabla que tiene dos campos, fechapresentacion y
renuevaa, renuevaa posee 0/null o un valor mayor que 0 (si es 0/null es una
presentacion, si es mayor una renovacion), la consulta debe mostrar por año,
cuantas presentaciones y renovaciones se realizaron y al final el total por
rango
hasta ahora tengo un codigo que pondre al final con unas imagenes que
muestran resultado, el cual posee el error de que funcionan con solo un rango
de fechas, si modifico el rango, la visualizacion de la tabla resultante no
es correcta, aunque el dato total si es correcto

uso sql server 2005

CODIGO:

declare @uno datetime, @dos datetime

set @uno = '20040101'
set @dos = '20101231'

select
TIPOÊSE WHEN renuevaa > 0 then 'RENOVACION' else 'PRESENTACION' end
,total2010=count(CASE WHEN YEAR(fechapresentacion)='2010' THEN 1 ELSE NULL
END)
,total2009=count(CASE WHEN YEAR(fechapresentacion)='2009' THEN 1 ELSE NULL
END)
,total2008=count(CASE WHEN YEAR(fechapresentacion)='2008' THEN 1 ELSE NULL
END)
,total2007 =count(CASE WHEN YEAR(fechapresentacion)='2007' THEN 1 ELSE NULL
END)
,total2006 =count(CASE WHEN YEAR(fechapresentacion)='2006' THEN 1 ELSE NULL
END)
,total2005 =count(CASE WHEN YEAR(fechapresentacion)='2005' THEN 1 ELSE NULL
END)
,total2004 =count(CASE WHEN YEAR(fechapresentacion)='2004' THEN 1 ELSE NULL
END)
,total =count(1)
from marca
where fechapresentacion between @uno and @dos
group by (CASE WHEN renuevaa > 0 then 'RENOVACION' else 'PRESENTACION' end)

Imagen con resultado
http://www.techdevs.cl/Dibujo.PNG

ahora si modifico el rango ..supongamos 2003-2008, la tabla sigue igual
aunque los valores totales cambian
http://www.techdevs.cl/Dibujo2.PNG

especificando mas mi consulta existira alguna manera de hacer que el
resultado de la tabla muestre el rango especificado ?

Preguntas similares