Agrupar por SUM

21/09/2004 - 16:32 por Miguel Tubia | Informe spam
Hola a todos,
tengo una consulta que no sé bien como hacer, a ver si me puede echar una
manita
tengo una tabla que tiene las categorias de trabajadores (tinyint) y las
horas extra que trabajan en segundos (campo presencia, int). Queremos sacar
todas las horas que trabajan en un grupo, para lo que hacemos lo siguiente:

select categoria, sum(presencia)
from marcajes
where datepart(mm, per)=9 and datepart(yy,per) 04 and categoria in (8, 9,
10, 11, 3, 4)
group by categoria

per es el periodo, y lo ponemos solo para este mes, y las categorias
listadas son las que nos interesan.
Ahora bien, queremos que nos salga de la siguiente forma:
* en columnas por categoria
* agrupado por filas de 5 horas de intervalo
Como lo siguiente:

Horas Cat.8 Cat.9 Cat.10 etc...
________________________________
<0

0-5
5-10

.. etc

Y todo exportado a un Excel...
Y no sabemos muy bien como hacerlo. Ya pensamos que por SQL no se puede
hacer y que hay q sacarlo por algún programilla, pero ya queremos aprovechar
y sacar el jugo al sql (somos algo sádicos quizás???).
En fin, si alguien tiene una idea por donde podemos tirar, le estaremos muy
agradecido.
Un saludo y gracias por anticipado
 

Leer las respuestas

#1 Liliana Sorrentino
21/09/2004 - 17:37 | Informe spam
Hola Miguel,
espero que te sirva, o puedas adaptarlo a tus necesidades:
Saludos, Liliana.


create table #tabla
(categoria tinyint,
presencia int,
per datetime)
insert #tabla select 8, 10, '20040901'
insert #tabla select 8, 20, '20040901'
insert #tabla select 8, 30, '20040901'
insert #tabla select 9, 100, '20040901'
insert #tabla select 9, 200, '20040901'
insert #tabla select 9, 300, '20040901'
insert #tabla select 9, 10, '20040901'

create table #tabla_rangos
(HoraD smallint,
HoraH smallint,
Descripcion char(10))
insert #tabla_rangos select 0, 5, ' 0-05'
insert #tabla_rangos select 6, 10, ' 6-10'
insert #tabla_rangos select 7, 15, '11-15'
insert #tabla_rangos select 16, 20, '16-20'
insert #tabla_rangos select 21, 25, '21-25'


SELECT Horas = Descripcion,
[Categoria 8 ] = SUM(CASE Categoria WHEN 8 THEN minutos ELSE 0 END),
[Categoria 9 ] = SUM(CASE Categoria WHEN 9 THEN minutos ELSE 0 END)
,
[Categoria 10] = SUM(CASE Categoria WHEN 10 THEN minutos ELSE 0 END)
,
[Categoria 11] = SUM(CASE Categoria WHEN 11 THEN minutos ELSE 0 END)
,
[Categoria 3 ] = SUM(CASE Categoria WHEN 3 THEN minutos ELSE 0 END)
,
[Categoria 4 ] = SUM(CASE Categoria WHEN 4 THEN minutos ELSE 0 END)
FROM (
SELECT Categoria,
Minutos = SUM(presencia),
Horas = CASE WHEN SUM(presencia) % 60 > 0 THEN (SUM
(presencia) / 60) + 1 ELSE SUM (presencia) / 60 END
FROM #tabla
WHERE MONTH( per) = 9 AND YEAR( per) = 2004 AND categoria in (8, 9,
10, 11, 3, 4)
GROUP BY categoria) Tiempos
RIGHT JOIN #tabla_rangos on Horas between HoraD and HoraH
GROUP BY Descripcion


"Miguel Tubia" <####m_tubiaARROBAhotmail.com###> escribió en el mensaje
news:#52mTf#
Hola a todos,
tengo una consulta que no sé bien como hacer, a ver si me puede echar una
manita
tengo una tabla que tiene las categorias de trabajadores (tinyint) y las
horas extra que trabajan en segundos (campo presencia, int). Queremos


sacar
todas las horas que trabajan en un grupo, para lo que hacemos lo


siguiente:

select categoria, sum(presencia)
from marcajes
where datepart(mm, per)=9 and datepart(yy,per) 04 and categoria in (8,


9,
10, 11, 3, 4)
group by categoria

per es el periodo, y lo ponemos solo para este mes, y las categorias
listadas son las que nos interesan.
Ahora bien, queremos que nos salga de la siguiente forma:
* en columnas por categoria
* agrupado por filas de 5 horas de intervalo
Como lo siguiente:

Horas Cat.8 Cat.9 Cat.10 etc...
________________________________
<0

0-5
5-10

.. etc

Y todo exportado a un Excel...
Y no sabemos muy bien como hacerlo. Ya pensamos que por SQL no se puede
hacer y que hay q sacarlo por algún programilla, pero ya queremos


aprovechar
y sacar el jugo al sql (somos algo sádicos quizás???).
En fin, si alguien tiene una idea por donde podemos tirar, le estaremos


muy
agradecido.
Un saludo y gracias por anticipado


Preguntas similares