Ayuda con query

26/09/2006 - 17:11 por Manel | Informe spam
Hola,

Necesito hacer un query que no se por donde pillar



Tengo una tabla más o menos así:

Campo1
Campo2
Campo3
Campo4 Texto
Campo5 Numérico


Necesito que la consulta me de una lista agrupada por los campos campo1,
campo2, campo3 en la que se sumen los valores del Campo5. Pero que solo me
devuelva hasta x filas por grupo y que si hay más de x filas, devuelva otra
fila 'otros' con la suma de campo5 de todos los registros que faltan. En
cada grupo, claro.

Es decir que si hay 8 registros en el grupo y solo quiero que se vean 5,
que me de los primeros 5 y la suma de los 3 restantes.

Muchas gracias

Preguntas similare

Leer las respuestas

#1 Maxi
26/09/2006 - 17:16 | Informe spam
Hola, podrias poner un ejemplo con datos y como deberia quedar?


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Manel" escribió en el mensaje
news:

Hola,

Necesito hacer un query que no se por donde pillar



Tengo una tabla más o menos así:

Campo1
Campo2
Campo3
Campo4 Texto
Campo5 Numérico


Necesito que la consulta me de una lista agrupada por los campos campo1,
campo2, campo3 en la que se sumen los valores del Campo5. Pero que solo me
devuelva hasta x filas por grupo y que si hay más de x filas, devuelva
otra
fila 'otros' con la suma de campo5 de todos los registros que faltan. En
cada grupo, claro.

Es decir que si hay 8 registros en el grupo y solo quiero que se vean 5,
que me de los primeros 5 y la suma de los 3 restantes.

Muchas gracias


Respuesta Responder a este mensaje
#2 Manel
26/09/2006 - 18:15 | Informe spam
Gracias por responder

A ver si soy capaz de explicarme

campo 1 = empresa
campo 2 = departamento
campo 3 = fecha
campo 4 = actividad
campo 5 = tiempo empleado en actividad (numerico expresado en segundos)


Quiero saber la suma del tiempo empleado en cada actividad agrupado por
empresa, departamento y fecha. Esto no tiene mayor problema.

El tema se complica en que estos datos han de ponerse en un gráfico de
barras y como las posibles actividades realizadas en un día pueden ser
muchas, el gráfico puede quedar ilegible.

Por ello, querría representar solo las más significativas en cuanto a suma
de tiempo ocupado y sumar los tiempos de las demás de ese día, departamento
y empresa, en un "OTROS".

Es decir, para la empresa 1, departamento 1 y fecha 01-02-2006, quiero la
suma de los tiempos de las primeras 5 (por ejemplo), actividades y la suma
de las restantes (si las hubiere) englobadas en un único "OTROS"


No pongo datos, porque la serie a poner para ser representativa, sería muy
larga y quizá aún liaría más.



Gracias de nuevo



"Maxi" wrote in news:e840r7X4GHA.1848
@TK2MSFTNGP06.phx.gbl:

Hola, podrias poner un ejemplo con datos y como deberia quedar?

Respuesta Responder a este mensaje
#3 Alejandro Mesa
26/09/2006 - 19:04 | Informe spam
Trata:

select
a.empresa,
a.departamento,
a.fecha,
case when a.actividad in (
select top 5
b.actividad
from
dbo.t1 as b
where
b.empresa = a.empresa
and b.departamento = a.departamento
and b.fecha = a.fecha
group by b.actividad
order by sum(b.tiempo) desc
) then a.actividad else 'OTROS' end as actividad,
sum(a.tiempo) as sum_tiempo
from
dbo.t1 as a
group by
a.empresa,
a.departamento,
a.fecha,
case when a.actividad in (
select top 5
b.actividad
from
dbo.t1 as b
where
b.empresa = a.empresa
and b.departamento = a.departamento
and b.fecha = a.fecha
group by b.actividad
order by sum(b.tiempo) desc
) then a.actividad else 'OTROS' end
go


AMB

"Manel" wrote:

Gracias por responder

A ver si soy capaz de explicarme

campo 1 = empresa
campo 2 = departamento
campo 3 = fecha
campo 4 = actividad
campo 5 = tiempo empleado en actividad (numerico expresado en segundos)


Quiero saber la suma del tiempo empleado en cada actividad agrupado por
empresa, departamento y fecha. Esto no tiene mayor problema.

El tema se complica en que estos datos han de ponerse en un gráfico de
barras y como las posibles actividades realizadas en un día pueden ser
muchas, el gráfico puede quedar ilegible.

Por ello, querría representar solo las más significativas en cuanto a suma
de tiempo ocupado y sumar los tiempos de las demás de ese día, departamento
y empresa, en un "OTROS".

Es decir, para la empresa 1, departamento 1 y fecha 01-02-2006, quiero la
suma de los tiempos de las primeras 5 (por ejemplo), actividades y la suma
de las restantes (si las hubiere) englobadas en un único "OTROS"


No pongo datos, porque la serie a poner para ser representativa, sería muy
larga y quizá aún liaría más.



Gracias de nuevo



"Maxi" wrote in news:e840r7X4GHA.1848
@TK2MSFTNGP06.phx.gbl:

> Hola, podrias poner un ejemplo con datos y como deberia quedar?
>


Respuesta Responder a este mensaje
#4 Manel
27/09/2006 - 12:38 | Informe spam
Gracias. Pero no me funciona.

El problema ahora es que no uso sql server sino mysql y la sintaxis cambia
un poco. En el caso del filtro de 5 registros es donde tengo el problema.
Tú pones "select top 5". La sintaxis en mysql es "limit 5" al final de
todo el select. En teoría funciona igual, pero mysql me devuelve un error
de sintaxis errónea cuando lo incluyo en un subquery.

Creo que al final haré un pre-programa que me llene una tabla temporal en
lugar de lanzar un único query.



wrote in news::

Trata:

select
a.empresa,
a.departamento,
a.fecha,
case when a.actividad in (
select top 5
b.actividad
from
dbo.t1 as b
where
b.empresa = a.empresa
and b.departamento = a.departamento
and b.fecha = a.fecha
group by b.actividad
order by sum(b.tiempo) desc
) then a.actividad else 'OTROS' end as actividad,
sum(a.tiempo) as sum_tiempo
from
dbo.t1 as a
group by
a.empresa,
a.departamento,
a.fecha,
case when a.actividad in (
select top 5
b.actividad
from
dbo.t1 as b
where
b.empresa = a.empresa
and b.departamento = a.departamento
and b.fecha = a.fecha
group by b.actividad
order by sum(b.tiempo) desc
) then a.actividad else 'OTROS' end
go


AMB

"Manel" wrote:

Gracias por responder

A ver si soy capaz de explicarme

campo 1 = empresa
campo 2 = departamento
campo 3 = fecha
campo 4 = actividad
campo 5 = tiempo empleado en actividad (numerico expresado en segundos)


Quiero saber la suma del tiempo empleado en cada actividad agrupado por
empresa, departamento y fecha. Esto no tiene mayor problema.

El tema se complica en que estos datos han de ponerse en un grà¡fico de
barras y como las posibles actividades realizadas en un dà­a pueden ser
muchas, el grà¡fico puede quedar ilegible.

Por ello, querrà­a representar solo las mà¡s significativas en cuanto a
suma de tiempo ocupado y sumar los tiempos de las demà¡s de ese dà­a,
departamento y empresa, en un "OTROS".

Es decir, para la empresa 1, departamento 1 y fecha 01-02-2006, quiero
la suma de los tiempos de las primeras 5 (por ejemplo), actividades y
la suma de las restantes (si las hubiere) englobadas en un àºnico
"OTROS"


No pongo datos, porque la serie a poner para ser representativa, serà­a
muy larga y quizà¡ aàºn liarà­a mà¡s.



Gracias de nuevo



"Maxi" wrote in news:e840r7X4GHA.1848
@TK2MSFTNGP06.phx.gbl:

> Hola, podrias poner un ejemplo con datos y como deberia quedar?
>





Respuesta Responder a este mensaje
#5 Alejandro Mesa
27/09/2006 - 14:12 | Informe spam
Manel,

Que pena haber mal gastado mi tiempo, de haber sabido que usas MySQL te
hubiese recomendado postear la pregunta en el grupo de noticias adecuado.


Alejandro Mesa

"Manel" wrote:


Gracias. Pero no me funciona.

El problema ahora es que no uso sql server sino mysql y la sintaxis cambia
un poco. En el caso del filtro de 5 registros es donde tengo el problema.
Tú pones "select top 5". La sintaxis en mysql es "limit 5" al final de
todo el select. En teoría funciona igual, pero mysql me devuelve un error
de sintaxis errónea cuando lo incluyo en un subquery.

Creo que al final haré un pre-programa que me llene una tabla temporal en
lugar de lanzar un único query.



wrote in news::

> Trata:
>
> select
> a.empresa,
> a.departamento,
> a.fecha,
> case when a.actividad in (
> select top 5
> b.actividad
> from
> dbo.t1 as b
> where
> b.empresa = a.empresa
> and b.departamento = a.departamento
> and b.fecha = a.fecha
> group by b.actividad
> order by sum(b.tiempo) desc
> ) then a.actividad else 'OTROS' end as actividad,
> sum(a.tiempo) as sum_tiempo
> from
> dbo.t1 as a
> group by
> a.empresa,
> a.departamento,
> a.fecha,
> case when a.actividad in (
> select top 5
> b.actividad
> from
> dbo.t1 as b
> where
> b.empresa = a.empresa
> and b.departamento = a.departamento
> and b.fecha = a.fecha
> group by b.actividad
> order by sum(b.tiempo) desc
> ) then a.actividad else 'OTROS' end
> go
>
>
> AMB
>
> "Manel" wrote:
>
>> Gracias por responder
>>
>> A ver si soy capaz de explicarme
>>
>> campo 1 = empresa
>> campo 2 = departamento
>> campo 3 = fecha
>> campo 4 = actividad
>> campo 5 = tiempo empleado en actividad (numerico expresado en segundos)
>>
>>
>> Quiero saber la suma del tiempo empleado en cada actividad agrupado por
>> empresa, departamento y fecha. Esto no tiene mayor problema.
>>
>> El tema se complica en que estos datos han de ponerse en un grà¡fico de
>> barras y como las posibles actividades realizadas en un dà­a pueden ser
>> muchas, el grà¡fico puede quedar ilegible.
>>
>> Por ello, querrà­a representar solo las mà¡s significativas en cuanto a
>> suma de tiempo ocupado y sumar los tiempos de las demà¡s de ese dà­a,
>> departamento y empresa, en un "OTROS".
>>
>> Es decir, para la empresa 1, departamento 1 y fecha 01-02-2006, quiero
>> la suma de los tiempos de las primeras 5 (por ejemplo), actividades y
>> la suma de las restantes (si las hubiere) englobadas en un àºnico
>> "OTROS"
>>
>>
>> No pongo datos, porque la serie a poner para ser representativa, serà­a
>> muy larga y quizà¡ aàºn liarà­a mà¡s.
>>
>>
>>
>> Gracias de nuevo
>>
>>
>>
>> "Maxi" wrote in news:e840r7X4GHA.1848
>> @TK2MSFTNGP06.phx.gbl:
>>
>> > Hola, podrias poner un ejemplo con datos y como deberia quedar?
>> >
>>
>>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida