PREGUNTA SOBRE GROUP BY

15/09/2007 - 03:19 por jcpc91 | Informe spam
hola grupo
espero me puedan ayudar tengo que diseñar un reporte con cristalreport
a partir de la tabla presente abajo en la cual debo hacer el gráfico
pero necesito agrupar los meses para formar trimestres es decir del
mes 1 al 3 sería el primer trimestre, el segundo trimestre sería 4 al
6 y asi hasta los cuarto trimestre y está agrupación lo kiero hacer en
un procedimiento almacenado para que le pueda decir por medio de una
sentencia de sql a sqlserver que me agrupe los registros por trimestre
es deicer del mes 1 al 3 los agrupe y los cuente espero me este
explicando y lo entiendan

id tipo ano
mes dia
10 ASESORÍA 2007 1 11
10 ASESORÍA 2007 1 11
10 ASESORÍA 2007 2 11
10 ASESORÍA 2007 3 11
10 ASESORÍA 2007 2 10
10 ASESORÍA 2007 3 13
10 ASESORÍA 2007 3 13
10 ASESORÍA 2007 4 12
10 ASESORÍA 2007 5 12
10 ASESORÍA 2007 4 12
10 ASESORÍA 2007 5 12

el resultado que kisiera es algo así des pues de agrupar y contar con
la funcipon sql COUNT() AS CUENTA
y agrupando los registros por trimestre (1-3) del de la columna mes

id tipo ano dia
CUENTA
10 ASESORÍA 2007 11 7

si observan en este ejemplo conto y agrupó todos los registros que
tubieran 1,2 y 3 y los contó
espero le entiendan
gracias por sus respuestas

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
15/09/2007 - 04:52 | Informe spam
Trata:

select
ano,
(mes / 3) + 1 as trimestre,
count(*)
from
@t
group by
ano,
(mes / 3) + 1
order by
ano,
trimestre
go

Tambien puedes usar la expresion "case".

select
ano,
case when mes between 1 and 3 then 1
case when mes between 4 and 6 then 2
case when mes between 7 and 9 then 3
else 4
end as trimestre,
count(*)
from
@t
group by
ano,
case when mes between 1 and 3 then 1
case when mes between 4 and 6 then 2
case when mes between 7 and 9 then 3
else 4
end
order by
ano,
trimestre
go


AMB

"" wrote:

hola grupo
espero me puedan ayudar tengo que diseñar un reporte con cristalreport
a partir de la tabla presente abajo en la cual debo hacer el gráfico
pero necesito agrupar los meses para formar trimestres es decir del
mes 1 al 3 sería el primer trimestre, el segundo trimestre sería 4 al
6 y asi hasta los cuarto trimestre y está agrupación lo kiero hacer en
un procedimiento almacenado para que le pueda decir por medio de una
sentencia de sql a sqlserver que me agrupe los registros por trimestre
es deicer del mes 1 al 3 los agrupe y los cuente espero me este
explicando y lo entiendan

id tipo ano
mes dia
10 ASESORÍA 2007 1 11
10 ASESORÍA 2007 1 11
10 ASESORÍA 2007 2 11
10 ASESORÍA 2007 3 11
10 ASESORÍA 2007 2 10
10 ASESORÍA 2007 3 13
10 ASESORÍA 2007 3 13
10 ASESORÍA 2007 4 12
10 ASESORÍA 2007 5 12
10 ASESORÍA 2007 4 12
10 ASESORÍA 2007 5 12

el resultado que kisiera es algo así des pues de agrupar y contar con
la funcipon sql COUNT() AS CUENTA
y agrupando los registros por trimestre (1-3) del de la columna mes

id tipo ano dia
CUENTA
10 ASESORÍA 2007 11 7

si observan en este ejemplo conto y agrupó todos los registros que
tubieran 1,2 y 3 y los contó
espero le entiendan
gracias por sus respuestas


Respuesta Responder a este mensaje
#2 Alejandro Mesa
15/09/2007 - 19:32 | Informe spam
Corrección:

(mes / 3) + 1 as trimestre,



(mes / 3) + case when (mes % 3) > 0 then 1 else 0 end as trimestre

tambien:

(mes / 3) + cast(cast((mes % 3) as bit) as int)


AMB

"Alejandro Mesa" wrote:

Trata:

select
ano,
(mes / 3) + 1 as trimestre,
count(*)
from
@t
group by
ano,
(mes / 3) + 1
order by
ano,
trimestre
go

Tambien puedes usar la expresion "case".

select
ano,
case when mes between 1 and 3 then 1
case when mes between 4 and 6 then 2
case when mes between 7 and 9 then 3
else 4
end as trimestre,
count(*)
from
@t
group by
ano,
case when mes between 1 and 3 then 1
case when mes between 4 and 6 then 2
case when mes between 7 and 9 then 3
else 4
end
order by
ano,
trimestre
go


AMB

"" wrote:

> hola grupo
> espero me puedan ayudar tengo que diseñar un reporte con cristalreport
> a partir de la tabla presente abajo en la cual debo hacer el gráfico
> pero necesito agrupar los meses para formar trimestres es decir del
> mes 1 al 3 sería el primer trimestre, el segundo trimestre sería 4 al
> 6 y asi hasta los cuarto trimestre y está agrupación lo kiero hacer en
> un procedimiento almacenado para que le pueda decir por medio de una
> sentencia de sql a sqlserver que me agrupe los registros por trimestre
> es deicer del mes 1 al 3 los agrupe y los cuente espero me este
> explicando y lo entiendan
>
> id tipo ano
> mes dia
> 10 ASESORÍA 2007 1 11
> 10 ASESORÍA 2007 1 11
> 10 ASESORÍA 2007 2 11
> 10 ASESORÍA 2007 3 11
> 10 ASESORÍA 2007 2 10
> 10 ASESORÍA 2007 3 13
> 10 ASESORÍA 2007 3 13
> 10 ASESORÍA 2007 4 12
> 10 ASESORÍA 2007 5 12
> 10 ASESORÍA 2007 4 12
> 10 ASESORÍA 2007 5 12
>
> el resultado que kisiera es algo así des pues de agrupar y contar con
> la funcipon sql COUNT() AS CUENTA
> y agrupando los registros por trimestre (1-3) del de la columna mes
>
> id tipo ano dia
> CUENTA
> 10 ASESORÍA 2007 11 7
>
> si observan en este ejemplo conto y agrupó todos los registros que
> tubieran 1,2 y 3 y los contó
> espero le entiendan
> gracias por sus respuestas
>
>
Respuesta Responder a este mensaje
#3 Ricardo Passians
16/09/2007 - 14:27 | Informe spam
(mes / 3) + 1 as trimestre,



(mes / 3) + case when (mes % 3) > 0 then 1 else 0 end as trimestre

tambien:

(mes / 3) + cast(cast((mes % 3) as bit) as int)





O también con:

(mes / 3) + SIGN(mes % 3)



Ricardo Passians
Respuesta Responder a este mensaje
#4 Alejandro Mesa
16/09/2007 - 17:58 | Informe spam
Hola Ricardo,

Me gusto esa solucion.

Saludos,
AMB


"Ricardo Passians" wrote:

>> (mes / 3) + 1 as trimestre,
>
> (mes / 3) + case when (mes % 3) > 0 then 1 else 0 end as trimestre
>
> tambien:
>
> (mes / 3) + cast(cast((mes % 3) as bit) as int)
>
>

O también con:

(mes / 3) + SIGN(mes % 3)



Ricardo Passians



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