No la pude realizar

17/10/2006 - 14:27 por Jiordie | Informe spam
Hola a todos!
Les cuento que esto ya me ha llevado muchos días y me rendí, no lo pude
hacer, entonces por eso pregunto acá que es donde estan los expertos:

Tengo los siguientes conjuntos de datos:
Maestro Tipo Vinculada Empleado
Id Nombre IdTipo IdEmpleado Id Nombre
1 Tipo 1 1 1 1 Empleado 1
2 Tipo 2 2 1 2 Empleado 2
3 Tipo 3 1 2 3 Empleado 3
3 2 4 Empleado 4
1 3 5 Empleado 5
2 3 6 Empleado 6
4 3
1 4
2 4
1 5
2 5
3 5


Ahora bien, lo que quiero es que en una consulta pueda saber cuales
empleados tienen todos los Tipos,
es decir, que mi consulta final de debe arrojar lo siguiente
3 Empleado 3
5 Empleado 5

debido a que solo el Id de empleado 3 y 5 tienen todos los tipos, espero me
haya explicado bien, y que me puedan ayudar, igualmente agradezco a quien
lea el mensaje y me pueda ayudar

Preguntas similare

Leer las respuestas

#6 BitOne®
18/10/2006 - 06:38 | Informe spam
Alejandro:

Creo existe un problemita en tu solucion en este punto

having count(distinct v.IdTipo) = (select t.[Id] from dbo.Tipos as t)

le dice al having que sea igual a un resultado que da mas de un resultado
pues la tabla tipos tiene mas de un valor.

Solo para verificar de no ser asi retificanos pls.

Tu eres el maestro en estas cuestiones.

Saludos,



"Alejandro Mesa" wrote in message
news:
Jiordie,

Ahora esta mejor. Cuando postees este tipo de problemas, es muy


conveniente
para quien quiere ayudar que se adjunten las sentencias de DDL y DML para


no
tener que perder tiempo y poder probar la solucion que se recomienda. Creo
que la ayuda debe ser mutua, no crees?

Existe una operacion conocida como "division relacional", que nos sirve


para
resolver este problema.

select e.*
from dbo.empleados as e
where e.[Id] in (
select v.IdEmpleado
from dbo.tabla_vinculada as v
group by v.IdEmpleado
having count(distinct v.IdTipo) = (select t.[Id] from dbo.Tipos as t)

)
go

Relational Division
http://www.dbazine.com/ofinterest/o...les/celko1


AMB

"Jiordie" wrote:

> te coloco la esctructura bien
> Tabla de Tipos
>
> Id Nombre
> 1 Tipo Uno
> 2 Tipo Dos
> 3 Tipo Tres
>
> Tabla Vinculada
>
> IdTipo IdEmpleado
> 1 1
> 2 1
> 1 2
> 3 2
> 1 3
> 2 3
> 3 3
> 1 4
> 3 4
> 1 5
> 2 5
> 3 5
>
> Tabla de empleados
>
> Id Nombre
> 1 Empleado Uno
> 2 Empleado Dos
> 3 Empleado Tres
> 4 Empleado Cuatro
> 5 Empleado Cinco
>
> El conjunto resultante debe ser algo asi
>
> 3 Empleado Tres
> 5 Empleado Cinco
>
> Solo los empleados 3 y 5 ya que son los únicos que tienen los tres tipo


de
> la tabla de tipos.
>
> Espero que ahora este mas claro
>
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Jiordie,
> >
> > Esta muy confusa la estructura y la data que posteastes. Crees que
> > pudieras
> > postear la estructura y data de ejemplo usando DML?
> >
> > create table
> >
> > insert into ...
> >
> >
> > AMB
> >
> >
> > "Jiordie" wrote:
> >
> >> Hola a todos!
> >> Les cuento que esto ya me ha llevado muchos días y me rendí, no lo


pude
> >> hacer, entonces por eso pregunto acá que es donde estan los expertos:
> >>
> >> Tengo los siguientes conjuntos de datos:
> >> Maestro Tipo Vinculada Empleado
> >> Id Nombre IdTipo IdEmpleado Id Nombre
> >> 1 Tipo 1 1 1 1 Empleado 1
> >> 2 Tipo 2 2 1 2 Empleado 2
> >> 3 Tipo 3 1 2 3 Empleado 3
> >> 3 2 4 Empleado 4
> >> 1 3 5 Empleado 5
> >> 2 3 6 Empleado 6
> >> 4 3
> >> 1 4
> >> 2 4
> >> 1 5
> >> 2 5
> >> 3 5
> >>
> >>
> >> Ahora bien, lo que quiero es que en una consulta pueda saber cuales
> >> empleados tienen todos los Tipos,
> >> es decir, que mi consulta final de debe arrojar lo siguiente
> >> 3 Empleado 3
> >> 5 Empleado 5
> >>
> >> debido a que solo el Id de empleado 3 y 5 tienen todos los tipos,


espero
> >> me
> >> haya explicado bien, y que me puedan ayudar, igualmente agradezco a


quien
> >> lea el mensaje y me pueda ayudar
> >>
> >>
> >>
>
>
>
Respuesta Responder a este mensaje
#7 Alejandro Mesa
18/10/2006 - 14:43 | Informe spam
BitOne®,

Tienes toda la razon, me comi la funcion de grupo "count". Gracias por la
captura.

select e.*
from dbo.empleados as e
where e.[Id] in (
select v.IdEmpleado
from dbo.tabla_vinculada as v
group by v.IdEmpleado
having count(distinct v.IdTipo) = (select count(t.[Id]) from dbo.Tipos as t)

)
go


AMB




"BitOne®" wrote:

Alejandro:

Creo existe un problemita en tu solucion en este punto

having count(distinct v.IdTipo) = (select t.[Id] from dbo.Tipos as t)

le dice al having que sea igual a un resultado que da mas de un resultado
pues la tabla tipos tiene mas de un valor.

Solo para verificar de no ser asi retificanos pls.

Tu eres el maestro en estas cuestiones.

Saludos,



"Alejandro Mesa" wrote in message
news:
> Jiordie,
>
> Ahora esta mejor. Cuando postees este tipo de problemas, es muy
conveniente
> para quien quiere ayudar que se adjunten las sentencias de DDL y DML para
no
> tener que perder tiempo y poder probar la solucion que se recomienda. Creo
> que la ayuda debe ser mutua, no crees?
>
> Existe una operacion conocida como "division relacional", que nos sirve
para
> resolver este problema.
>
> select e.*
> from dbo.empleados as e
> where e.[Id] in (
> select v.IdEmpleado
> from dbo.tabla_vinculada as v
> group by v.IdEmpleado
> having count(distinct v.IdTipo) = (select t.[Id] from dbo.Tipos as t)
>
> )
> go
>
> Relational Division
> http://www.dbazine.com/ofinterest/o...les/celko1
>
>
> AMB
>
> "Jiordie" wrote:
>
> > te coloco la esctructura bien
> > Tabla de Tipos
> >
> > Id Nombre
> > 1 Tipo Uno
> > 2 Tipo Dos
> > 3 Tipo Tres
> >
> > Tabla Vinculada
> >
> > IdTipo IdEmpleado
> > 1 1
> > 2 1
> > 1 2
> > 3 2
> > 1 3
> > 2 3
> > 3 3
> > 1 4
> > 3 4
> > 1 5
> > 2 5
> > 3 5
> >
> > Tabla de empleados
> >
> > Id Nombre
> > 1 Empleado Uno
> > 2 Empleado Dos
> > 3 Empleado Tres
> > 4 Empleado Cuatro
> > 5 Empleado Cinco
> >
> > El conjunto resultante debe ser algo asi
> >
> > 3 Empleado Tres
> > 5 Empleado Cinco
> >
> > Solo los empleados 3 y 5 ya que son los únicos que tienen los tres tipo
de
> > la tabla de tipos.
> >
> > Espero que ahora este mas claro
> >
> >
> > "Alejandro Mesa" escribió en
el
> > mensaje news:
> > > Jiordie,
> > >
> > > Esta muy confusa la estructura y la data que posteastes. Crees que
> > > pudieras
> > > postear la estructura y data de ejemplo usando DML?
> > >
> > > create table
> > >
> > > insert into ...
> > >
> > >
> > > AMB
> > >
> > >
> > > "Jiordie" wrote:
> > >
> > >> Hola a todos!
> > >> Les cuento que esto ya me ha llevado muchos días y me rendí, no lo
pude
> > >> hacer, entonces por eso pregunto acá que es donde estan los expertos:
> > >>
> > >> Tengo los siguientes conjuntos de datos:
> > >> Maestro Tipo Vinculada Empleado
> > >> Id Nombre IdTipo IdEmpleado Id Nombre
> > >> 1 Tipo 1 1 1 1 Empleado 1
> > >> 2 Tipo 2 2 1 2 Empleado 2
> > >> 3 Tipo 3 1 2 3 Empleado 3
> > >> 3 2 4 Empleado 4
> > >> 1 3 5 Empleado 5
> > >> 2 3 6 Empleado 6
> > >> 4 3
> > >> 1 4
> > >> 2 4
> > >> 1 5
> > >> 2 5
> > >> 3 5
> > >>
> > >>
> > >> Ahora bien, lo que quiero es que en una consulta pueda saber cuales
> > >> empleados tienen todos los Tipos,
> > >> es decir, que mi consulta final de debe arrojar lo siguiente
> > >> 3 Empleado 3
> > >> 5 Empleado 5
> > >>
> > >> debido a que solo el Id de empleado 3 y 5 tienen todos los tipos,
espero
> > >> me
> > >> haya explicado bien, y que me puedan ayudar, igualmente agradezco a
quien
> > >> lea el mensaje y me pueda ayudar
> > >>
> > >>
> > >>
> >
> >
> >



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