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

#6 Isaias
27/09/2006 - 23:12 | Informe spam
Alex

Si te sirve de consuelo (espero), me ha pasado lo mismo en este y otros
foros, para alegrarte un poco.

Una vez arme un hilo como de 15 preguntas y respuestas, al final, el hablaba
de COBOL y yo de SQL Server. (casi me doy un tiro en la sien).

Saludos
IIslas


"Alejandro Mesa" wrote:

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
#7 Alejandro Mesa
28/09/2006 - 00:13 | Informe spam
Isaias,

Gracias por tu apoyo.


AMB

"Isaias" wrote:

Alex

Si te sirve de consuelo (espero), me ha pasado lo mismo en este y otros
foros, para alegrarte un poco.

Una vez arme un hilo como de 15 preguntas y respuestas, al final, el hablaba
de COBOL y yo de SQL Server. (casi me doy un tiro en la sien).

Saludos
IIslas


"Alejandro Mesa" wrote:

> 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
#8 Manel
11/10/2006 - 11:55 | Informe spam
Alejandro,

Disculpa el retardo en la respuesta, pero he estado fuera y no tenía acceso
a postear.

Agradezco tu interés y tu "perdida" de tiempo. Para mí no lo ha sido, pues
lo que buscaba era el enfoque estratégico y ése me lo has dado
adecuadamente. La razón de postear aquí es porque SQL es SQL en todas
partes y las estrategias son casi siempre válidas. En este caso, no es de
aplicación por no estar implementada una funcionalidad concreta, que por
desgracia es fundamental en este query. Cosa que yo desconocía hasta
intentar ponerla en práctica.

Soy informático desde hace muuuuuuuucho tiempo y sé distinguir el cómo
enfocar un problema y el detalle de su ejecución.

Lo dicho, gracias por tu tiempo y disculpa si te has sentido "traicionado".
La elección del uso de una base de datos concreta no depende de mí.



wrote in news::

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?
>> >
>>
>>
>


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