Ayuda consulta

19/10/2006 - 11:23 por Paco | Informe spam
Hola a todos
Necesito hacer una consulta y no sé cual sería la mejor forma. Lo ideal para
mi seria una vista pero si tiene que ser un funcion pues también me iria
bien. Os explico la situación y a ver si alguien me puede ayudar.

Tengo las siguientes tablas :

Departamentos :
Departamento (k)
Descripcion

Personas:
Departemento (k)
Numero (k)
Nombre
Apellido1
Apellido2

El campo Numero de la tabla Personas no es consecutivo y puede no empezar
por 0, es decir, las filas pueden estar así:
Departamento1,2,nombre,apellido
Departamento1,4,nombre,apellido
Departamento2,1,nombre,apellido
Departemanto2,2,nombre,apellido

Me gustaría obtener una consulta por departamento con las dos primeras
personas de cada departamento. Algo así:

Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2

Muchas gracias a todos

Preguntas similare

Leer las respuestas

#6 Paco
19/10/2006 - 18:50 | Informe spam
Gracias por todo Alejandro me ha ido perfecto.

Ahora la pregunta del millón. Para esta consulta no pasa nada porque son
pocos registros y para algo así como 500 departamentos y 4 o cinco empleados
por departamento, ¿seria critico el rendimiento o funcionaria bien?

Gracios por todo de nuevo

"Alejandro Mesa" wrote:

Paco,

Guarda ese resultado en una tabla, agrega una columna para hacer un ranking
(quien es 1 y quien es 2) luego haces un pivot.

create table #t (
departamento int,
descripcion varchar(50),
numero int,
nombre varchar(50),
apellido1 varchar(50),
apellido2 varchar(50),
rank int
)

insert into #t
select
d.Departamento,
d.Descripcion,
p.Numero,
p.Nombre,
p.Apellido1,
p.Apellido2,
null
from
dbo.Departamentos as d
inner join
dbo.Personas as p
on d.Departamento = p.Departemento
where
p.Numero in (
select top 2 p1.Numero
from dbo.Personas as p1
where p1.Departamento = d.Departamento
order by p1.Numero ASC
)

update #t
set rank = (
select count(*)
from #t as a
where a.departamento = #t.departamento and a.numero <= #t.numero
)

select
Departamento,
Descripcion,
max(case when rank = 1 then nombre end) as nombre_1,
max(case when rank = 1 then apellido1 end) as apellido1_1,
max(case when rank = 1 then apellido2 end) as apellido2_1,
max(case when rank = 2 then nombre end) as nombre_2,
max(case when rank = 2 then apellido1 end) as apellido1_2,
max(case when rank = 2 then apellido2 end) as apellido2_2,
from
#t
group by
Departemento,
Descripcion

drop table #t
go


"Paco" wrote:

> Hola Alejandro
>
> Antes de nada gracias por la respuesta.
> Pero creo que no me he explicado bien. Con esta consulta que me propones lo
> que obtengo son las dos primeras filas de cada Departamento en la tabla
> Personas.
> Lo que me gustaría hacer y no sé como, es juntar esos dos registros en uno.
>
> Algo así es lo que obtengo con la consulta que me propones:
>
> Departamento1 Descripcion1 Nombre1 Apellido1
> Departamento1 Descripcion1 Nombre2 Apellido2
> Departamento2 Descripcion2 Nombre1 Apellido1
> Departamento2 Descripcion2 Nombre2 Apellido2
> Departamento3 Descripcion3 Nombre1 Apellido1
> Departamento3 Descripcion3 Nombre2 Apellido2
>
> Algo así es lo que me gustaría obtener:
>
> Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
>
> "Alejandro Mesa" wrote:
>
> > Paco,
> >
> > Perfecto. Entonces puedes usar la siguiente sentencia.
> >
> > select
> > d.Departemento,
> > d.Descripcion,
> > p.Nombre,
> > p.Apellido1,
> > p.Apellido2
> > from
> > dbo.Departamentos as d
> > inner join
> > dbo.Personas as p
> > on d.Departamento = p.Departemento
> > where
> > p.Numero in (
> > select top 2 p1.Numero
> > from dbo.Personas as p1
> > where p1.Departamento = d.Departamento
> > order by p1.Numero ASC
> > )
> > order by
> > d.Departemento,
> > p.Nombre,
> > p.Apellido1,
> > p.Apellido2
> > go
> >
> >
> > AMB
> >
> > "Paco" wrote:
> >
> > > Pues el criterio es simple los dos primeros que se encuentre en orden de
> > > clave primaria
> > >
> > > "Alejandro Mesa" wrote:
> > >
> > > > Paco,
> > > >
> > > > Cual seria el criterio a usar para saber que esas dos personas son las dos
> > > > primeras del departamento?
> > > >
> > > >
> > > > AMB
> > > >
> > > > "Paco" wrote:
> > > >
> > > > > Hola a todos
> > > > > Necesito hacer una consulta y no sé cual sería la mejor forma. Lo ideal para
> > > > > mi seria una vista pero si tiene que ser un funcion pues también me iria
> > > > > bien. Os explico la situación y a ver si alguien me puede ayudar.
> > > > >
> > > > > Tengo las siguientes tablas :
> > > > >
> > > > > Departamentos :
> > > > > Departamento (k)
> > > > > Descripcion
> > > > >
> > > > > Personas:
> > > > > Departemento (k)
> > > > > Numero (k)
> > > > > Nombre
> > > > > Apellido1
> > > > > Apellido2
> > > > >
> > > > > El campo Numero de la tabla Personas no es consecutivo y puede no empezar
> > > > > por 0, es decir, las filas pueden estar así:
> > > > > Departamento1,2,nombre,apellido
> > > > > Departamento1,4,nombre,apellido
> > > > > Departamento2,1,nombre,apellido
> > > > > Departemanto2,2,nombre,apellido
> > > > >
> > > > > Me gustaría obtener una consulta por departamento con las dos primeras
> > > > > personas de cada departamento. Algo así:
> > > > >
> > > > > Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > >
> > > > > Muchas gracias a todos
Respuesta Responder a este mensaje
#7 Alejandro Mesa
19/10/2006 - 19:42 | Informe spam
Paco,

Depende de los indices que estes usando, pero para la cantidad que dices no
creo que el rendimiento varie mucho.


AMB


"Paco" wrote:

Gracias por todo Alejandro me ha ido perfecto.

Ahora la pregunta del millón. Para esta consulta no pasa nada porque son
pocos registros y para algo así como 500 departamentos y 4 o cinco empleados
por departamento, ¿seria critico el rendimiento o funcionaria bien?

Gracios por todo de nuevo

"Alejandro Mesa" wrote:

> Paco,
>
> Guarda ese resultado en una tabla, agrega una columna para hacer un ranking
> (quien es 1 y quien es 2) luego haces un pivot.
>
> create table #t (
> departamento int,
> descripcion varchar(50),
> numero int,
> nombre varchar(50),
> apellido1 varchar(50),
> apellido2 varchar(50),
> rank int
> )
>
> insert into #t
> select
> d.Departamento,
> d.Descripcion,
> p.Numero,
> p.Nombre,
> p.Apellido1,
> p.Apellido2,
> null
> from
> dbo.Departamentos as d
> inner join
> dbo.Personas as p
> on d.Departamento = p.Departemento
> where
> p.Numero in (
> select top 2 p1.Numero
> from dbo.Personas as p1
> where p1.Departamento = d.Departamento
> order by p1.Numero ASC
> )
>
> update #t
> set rank = (
> select count(*)
> from #t as a
> where a.departamento = #t.departamento and a.numero <= #t.numero
> )
>
> select
> Departamento,
> Descripcion,
> max(case when rank = 1 then nombre end) as nombre_1,
> max(case when rank = 1 then apellido1 end) as apellido1_1,
> max(case when rank = 1 then apellido2 end) as apellido2_1,
> max(case when rank = 2 then nombre end) as nombre_2,
> max(case when rank = 2 then apellido1 end) as apellido1_2,
> max(case when rank = 2 then apellido2 end) as apellido2_2,
> from
> #t
> group by
> Departemento,
> Descripcion
>
> drop table #t
> go
>
>
> "Paco" wrote:
>
> > Hola Alejandro
> >
> > Antes de nada gracias por la respuesta.
> > Pero creo que no me he explicado bien. Con esta consulta que me propones lo
> > que obtengo son las dos primeras filas de cada Departamento en la tabla
> > Personas.
> > Lo que me gustaría hacer y no sé como, es juntar esos dos registros en uno.
> >
> > Algo así es lo que obtengo con la consulta que me propones:
> >
> > Departamento1 Descripcion1 Nombre1 Apellido1
> > Departamento1 Descripcion1 Nombre2 Apellido2
> > Departamento2 Descripcion2 Nombre1 Apellido1
> > Departamento2 Descripcion2 Nombre2 Apellido2
> > Departamento3 Descripcion3 Nombre1 Apellido1
> > Departamento3 Descripcion3 Nombre2 Apellido2
> >
> > Algo así es lo que me gustaría obtener:
> >
> > Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> > Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> >
> > "Alejandro Mesa" wrote:
> >
> > > Paco,
> > >
> > > Perfecto. Entonces puedes usar la siguiente sentencia.
> > >
> > > select
> > > d.Departemento,
> > > d.Descripcion,
> > > p.Nombre,
> > > p.Apellido1,
> > > p.Apellido2
> > > from
> > > dbo.Departamentos as d
> > > inner join
> > > dbo.Personas as p
> > > on d.Departamento = p.Departemento
> > > where
> > > p.Numero in (
> > > select top 2 p1.Numero
> > > from dbo.Personas as p1
> > > where p1.Departamento = d.Departamento
> > > order by p1.Numero ASC
> > > )
> > > order by
> > > d.Departemento,
> > > p.Nombre,
> > > p.Apellido1,
> > > p.Apellido2
> > > go
> > >
> > >
> > > AMB
> > >
> > > "Paco" wrote:
> > >
> > > > Pues el criterio es simple los dos primeros que se encuentre en orden de
> > > > clave primaria
> > > >
> > > > "Alejandro Mesa" wrote:
> > > >
> > > > > Paco,
> > > > >
> > > > > Cual seria el criterio a usar para saber que esas dos personas son las dos
> > > > > primeras del departamento?
> > > > >
> > > > >
> > > > > AMB
> > > > >
> > > > > "Paco" wrote:
> > > > >
> > > > > > Hola a todos
> > > > > > Necesito hacer una consulta y no sé cual sería la mejor forma. Lo ideal para
> > > > > > mi seria una vista pero si tiene que ser un funcion pues también me iria
> > > > > > bien. Os explico la situación y a ver si alguien me puede ayudar.
> > > > > >
> > > > > > Tengo las siguientes tablas :
> > > > > >
> > > > > > Departamentos :
> > > > > > Departamento (k)
> > > > > > Descripcion
> > > > > >
> > > > > > Personas:
> > > > > > Departemento (k)
> > > > > > Numero (k)
> > > > > > Nombre
> > > > > > Apellido1
> > > > > > Apellido2
> > > > > >
> > > > > > El campo Numero de la tabla Personas no es consecutivo y puede no empezar
> > > > > > por 0, es decir, las filas pueden estar así:
> > > > > > Departamento1,2,nombre,apellido
> > > > > > Departamento1,4,nombre,apellido
> > > > > > Departamento2,1,nombre,apellido
> > > > > > Departemanto2,2,nombre,apellido
> > > > > >
> > > > > > Me gustaría obtener una consulta por departamento con las dos primeras
> > > > > > personas de cada departamento. Algo así:
> > > > > >
> > > > > > Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > > Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > > Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > >
> > > > > > Muchas gracias a todos
Respuesta Responder a este mensaje
#8 Paco
19/10/2006 - 19:45 | Informe spam
Otra cosa Alejandro

Mi intención era hacer una función que me devolviera esa tabla para poder
usarla en otras vistas o enviarla a la capa de datos. Pero mi sorpresa cuando
he leido en los BOL que las funciones no soportan tablas temporales. ¿Es
posible hacer algo así o tendría que crear un tabla en la BBDD e ir borrando
los registros cada vez que me solicitan la consulta? Esto último igual no es
muy ortodoxo.

Disculpa el abuso de tanta pregunta, pero soy un poco novato con el sql...

Gracias de nuevo

"Alejandro Mesa" wrote:

Paco,

Guarda ese resultado en una tabla, agrega una columna para hacer un ranking
(quien es 1 y quien es 2) luego haces un pivot.

create table #t (
departamento int,
descripcion varchar(50),
numero int,
nombre varchar(50),
apellido1 varchar(50),
apellido2 varchar(50),
rank int
)

insert into #t
select
d.Departamento,
d.Descripcion,
p.Numero,
p.Nombre,
p.Apellido1,
p.Apellido2,
null
from
dbo.Departamentos as d
inner join
dbo.Personas as p
on d.Departamento = p.Departemento
where
p.Numero in (
select top 2 p1.Numero
from dbo.Personas as p1
where p1.Departamento = d.Departamento
order by p1.Numero ASC
)

update #t
set rank = (
select count(*)
from #t as a
where a.departamento = #t.departamento and a.numero <= #t.numero
)

select
Departamento,
Descripcion,
max(case when rank = 1 then nombre end) as nombre_1,
max(case when rank = 1 then apellido1 end) as apellido1_1,
max(case when rank = 1 then apellido2 end) as apellido2_1,
max(case when rank = 2 then nombre end) as nombre_2,
max(case when rank = 2 then apellido1 end) as apellido1_2,
max(case when rank = 2 then apellido2 end) as apellido2_2,
from
#t
group by
Departemento,
Descripcion

drop table #t
go


"Paco" wrote:

> Hola Alejandro
>
> Antes de nada gracias por la respuesta.
> Pero creo que no me he explicado bien. Con esta consulta que me propones lo
> que obtengo son las dos primeras filas de cada Departamento en la tabla
> Personas.
> Lo que me gustaría hacer y no sé como, es juntar esos dos registros en uno.
>
> Algo así es lo que obtengo con la consulta que me propones:
>
> Departamento1 Descripcion1 Nombre1 Apellido1
> Departamento1 Descripcion1 Nombre2 Apellido2
> Departamento2 Descripcion2 Nombre1 Apellido1
> Departamento2 Descripcion2 Nombre2 Apellido2
> Departamento3 Descripcion3 Nombre1 Apellido1
> Departamento3 Descripcion3 Nombre2 Apellido2
>
> Algo así es lo que me gustaría obtener:
>
> Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
>
> "Alejandro Mesa" wrote:
>
> > Paco,
> >
> > Perfecto. Entonces puedes usar la siguiente sentencia.
> >
> > select
> > d.Departemento,
> > d.Descripcion,
> > p.Nombre,
> > p.Apellido1,
> > p.Apellido2
> > from
> > dbo.Departamentos as d
> > inner join
> > dbo.Personas as p
> > on d.Departamento = p.Departemento
> > where
> > p.Numero in (
> > select top 2 p1.Numero
> > from dbo.Personas as p1
> > where p1.Departamento = d.Departamento
> > order by p1.Numero ASC
> > )
> > order by
> > d.Departemento,
> > p.Nombre,
> > p.Apellido1,
> > p.Apellido2
> > go
> >
> >
> > AMB
> >
> > "Paco" wrote:
> >
> > > Pues el criterio es simple los dos primeros que se encuentre en orden de
> > > clave primaria
> > >
> > > "Alejandro Mesa" wrote:
> > >
> > > > Paco,
> > > >
> > > > Cual seria el criterio a usar para saber que esas dos personas son las dos
> > > > primeras del departamento?
> > > >
> > > >
> > > > AMB
> > > >
> > > > "Paco" wrote:
> > > >
> > > > > Hola a todos
> > > > > Necesito hacer una consulta y no sé cual sería la mejor forma. Lo ideal para
> > > > > mi seria una vista pero si tiene que ser un funcion pues también me iria
> > > > > bien. Os explico la situación y a ver si alguien me puede ayudar.
> > > > >
> > > > > Tengo las siguientes tablas :
> > > > >
> > > > > Departamentos :
> > > > > Departamento (k)
> > > > > Descripcion
> > > > >
> > > > > Personas:
> > > > > Departemento (k)
> > > > > Numero (k)
> > > > > Nombre
> > > > > Apellido1
> > > > > Apellido2
> > > > >
> > > > > El campo Numero de la tabla Personas no es consecutivo y puede no empezar
> > > > > por 0, es decir, las filas pueden estar así:
> > > > > Departamento1,2,nombre,apellido
> > > > > Departamento1,4,nombre,apellido
> > > > > Departamento2,1,nombre,apellido
> > > > > Departemanto2,2,nombre,apellido
> > > > >
> > > > > Me gustaría obtener una consulta por departamento con las dos primeras
> > > > > personas de cada departamento. Algo así:
> > > > >
> > > > > Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > >
> > > > > Muchas gracias a todos
Respuesta Responder a este mensaje
#9 Alejandro Mesa
19/10/2006 - 20:04 | Informe spam
Paco,

Puedes poner esata sentencia en una funcion inline que devuelva una tabla.

select
Departamento,
Descripcion,
max(case when rank = 1 then nombre end) as nombre_1,
max(case when rank = 1 then apellido1 end) as apellido1_1,
max(case when rank = 1 then apellido2 end) as apellido2_1,
max(case when rank = 2 then nombre end) as nombre_2,
max(case when rank = 2 then apellido1 end) as apellido1_2,
max(case when rank = 2 then apellido2 end) as apellido2_2,
from
(
select
a.Departamento,
a.Descripcion,
a.Numero,
a.Nombre,
a.Apellido1,
a.Apellido2,
count(*) as rank
from
(
select
d.Departamento,
d.Descripcion,
p.Numero,
p.Nombre,
p.Apellido1,
p.Apellido2,
from
dbo.Departamentos as d
inner join
dbo.Personas as p
on d.Departamento = p.Departemento
where
p.Numero in (
select top 2 p1.Numero
from dbo.Personas as p1
where p1.Departamento = d.Departamento
order by p1.Numero ASC
)
) as a
inner join
(
select
d.Departamento,
d.Descripcion,
p.Numero,
p.Nombre,
p.Apellido1,
p.Apellido2,
from
dbo.Departamentos as d
inner join
dbo.Personas as p
on d.Departamento = p.Departemento
where
p.Numero in (
select top 2 p1.Numero
from dbo.Personas as p1
where p1.Departamento = d.Departamento
order by p1.Numero ASC
)
) as b
on a.Departamento = b.Departamento and a.Numero >= b.Numero
group by
a.Departamento,
a.Descripcion,
a.Numero,
a.Nombre,
a.Apellido1,
a.Apellido2
) as t
group by
Departamento,
Descripcion


AMB


"Paco" wrote:

Otra cosa Alejandro

Mi intención era hacer una función que me devolviera esa tabla para poder
usarla en otras vistas o enviarla a la capa de datos. Pero mi sorpresa cuando
he leido en los BOL que las funciones no soportan tablas temporales. ¿Es
posible hacer algo así o tendría que crear un tabla en la BBDD e ir borrando
los registros cada vez que me solicitan la consulta? Esto último igual no es
muy ortodoxo.

Disculpa el abuso de tanta pregunta, pero soy un poco novato con el sql...

Gracias de nuevo

"Alejandro Mesa" wrote:

> Paco,
>
> Guarda ese resultado en una tabla, agrega una columna para hacer un ranking
> (quien es 1 y quien es 2) luego haces un pivot.
>
> create table #t (
> departamento int,
> descripcion varchar(50),
> numero int,
> nombre varchar(50),
> apellido1 varchar(50),
> apellido2 varchar(50),
> rank int
> )
>
> insert into #t
> select
> d.Departamento,
> d.Descripcion,
> p.Numero,
> p.Nombre,
> p.Apellido1,
> p.Apellido2,
> null
> from
> dbo.Departamentos as d
> inner join
> dbo.Personas as p
> on d.Departamento = p.Departemento
> where
> p.Numero in (
> select top 2 p1.Numero
> from dbo.Personas as p1
> where p1.Departamento = d.Departamento
> order by p1.Numero ASC
> )
>
> update #t
> set rank = (
> select count(*)
> from #t as a
> where a.departamento = #t.departamento and a.numero <= #t.numero
> )
>
> select
> Departamento,
> Descripcion,
> max(case when rank = 1 then nombre end) as nombre_1,
> max(case when rank = 1 then apellido1 end) as apellido1_1,
> max(case when rank = 1 then apellido2 end) as apellido2_1,
> max(case when rank = 2 then nombre end) as nombre_2,
> max(case when rank = 2 then apellido1 end) as apellido1_2,
> max(case when rank = 2 then apellido2 end) as apellido2_2,
> from
> #t
> group by
> Departemento,
> Descripcion
>
> drop table #t
> go
>
>
> "Paco" wrote:
>
> > Hola Alejandro
> >
> > Antes de nada gracias por la respuesta.
> > Pero creo que no me he explicado bien. Con esta consulta que me propones lo
> > que obtengo son las dos primeras filas de cada Departamento en la tabla
> > Personas.
> > Lo que me gustaría hacer y no sé como, es juntar esos dos registros en uno.
> >
> > Algo así es lo que obtengo con la consulta que me propones:
> >
> > Departamento1 Descripcion1 Nombre1 Apellido1
> > Departamento1 Descripcion1 Nombre2 Apellido2
> > Departamento2 Descripcion2 Nombre1 Apellido1
> > Departamento2 Descripcion2 Nombre2 Apellido2
> > Departamento3 Descripcion3 Nombre1 Apellido1
> > Departamento3 Descripcion3 Nombre2 Apellido2
> >
> > Algo así es lo que me gustaría obtener:
> >
> > Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> > Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> >
> > "Alejandro Mesa" wrote:
> >
> > > Paco,
> > >
> > > Perfecto. Entonces puedes usar la siguiente sentencia.
> > >
> > > select
> > > d.Departemento,
> > > d.Descripcion,
> > > p.Nombre,
> > > p.Apellido1,
> > > p.Apellido2
> > > from
> > > dbo.Departamentos as d
> > > inner join
> > > dbo.Personas as p
> > > on d.Departamento = p.Departemento
> > > where
> > > p.Numero in (
> > > select top 2 p1.Numero
> > > from dbo.Personas as p1
> > > where p1.Departamento = d.Departamento
> > > order by p1.Numero ASC
> > > )
> > > order by
> > > d.Departemento,
> > > p.Nombre,
> > > p.Apellido1,
> > > p.Apellido2
> > > go
> > >
> > >
> > > AMB
> > >
> > > "Paco" wrote:
> > >
> > > > Pues el criterio es simple los dos primeros que se encuentre en orden de
> > > > clave primaria
> > > >
> > > > "Alejandro Mesa" wrote:
> > > >
> > > > > Paco,
> > > > >
> > > > > Cual seria el criterio a usar para saber que esas dos personas son las dos
> > > > > primeras del departamento?
> > > > >
> > > > >
> > > > > AMB
> > > > >
> > > > > "Paco" wrote:
> > > > >
> > > > > > Hola a todos
> > > > > > Necesito hacer una consulta y no sé cual sería la mejor forma. Lo ideal para
> > > > > > mi seria una vista pero si tiene que ser un funcion pues también me iria
> > > > > > bien. Os explico la situación y a ver si alguien me puede ayudar.
> > > > > >
> > > > > > Tengo las siguientes tablas :
> > > > > >
> > > > > > Departamentos :
> > > > > > Departamento (k)
> > > > > > Descripcion
> > > > > >
> > > > > > Personas:
> > > > > > Departemento (k)
> > > > > > Numero (k)
> > > > > > Nombre
> > > > > > Apellido1
> > > > > > Apellido2
> > > > > >
> > > > > > El campo Numero de la tabla Personas no es consecutivo y puede no empezar
> > > > > > por 0, es decir, las filas pueden estar así:
> > > > > > Departamento1,2,nombre,apellido
> > > > > > Departamento1,4,nombre,apellido
> > > > > > Departamento2,1,nombre,apellido
> > > > > > Departemanto2,2,nombre,apellido
> > > > > >
> > > > > > Me gustaría obtener una consulta por departamento con las dos primeras
> > > > > > personas de cada departamento. Algo así:
> > > > > >
> > > > > > Departamento1 Descripcion1 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > > Departamento2 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > > Departamento3 Descripcion2 Nombre1 Apellido1 Nombre2 Apellido2
> > > > > >
> > > > > > Muchas gracias a todos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida