Ayuda con consulta INTERSECT please...

23/05/2005 - 17:25 por JorTriFa | Informe spam
Hola a todos,

Tengo la siguiente consulta (quiero todas las emrpesas que realizan el
servicio 102 y 104):

SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio = 102
INTERSECT
SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio = 104

y la consuta me da un errorpuedo utilizar la sentencia INTERSECT??

Existe otra forma de hacerlo?

La tabla, tiene los siguientes valores: (se supone que me deberia dar las
empresas 13 y 15)

idEmpresa idservicio
11 101
11 102
11 201
11 202
11 204
11 205
12 102
12 103
13 101
13 102
13 104
14 101
14 201
14 202
14 204
14 401
15 102
15 104
15 201
15 204

Gracias a to2

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
23/05/2005 - 19:14 | Informe spam
Tambien,

...
having
count(distinct idservicio) = 2



AMB


"Alejandro Mesa" wrote:

Trata:

select
idEmpresa
from
t1
where
idservicio in (102, 104)
group by
idEmpresa
having
min(idservicio) != max(idservicio)
go


AMB

"JorTriFa" wrote:

> Hola a todos,
>
> Tengo la siguiente consulta (quiero todas las emrpesas que realizan el
> servicio 102 y 104):
>
> SELECT idEmpresa
> FROM ServiciosRealizaEmpresa
> WHERE idservicio = 102
> INTERSECT
> SELECT idEmpresa
> FROM ServiciosRealizaEmpresa
> WHERE idservicio = 104
>
> y la consuta me da un errorpuedo utilizar la sentencia INTERSECT??
>
> Existe otra forma de hacerlo?
>
> La tabla, tiene los siguientes valores: (se supone que me deberia dar las
> empresas 13 y 15)
>
> idEmpresa idservicio
> 11 101
> 11 102
> 11 201
> 11 202
> 11 204
> 11 205
> 12 102
> 12 103
> 13 101
> 13 102
> 13 104
> 14 101
> 14 201
> 14 202
> 14 204
> 14 401
> 15 102
> 15 104
> 15 201
> 15 204
>
> Gracias a to2
>
>
>
Respuesta Responder a este mensaje
#7 Alejandro Mesa
23/05/2005 - 19:14 | Informe spam
Trata:

select
idEmpresa
from
t1
where
idservicio in (102, 104)
group by
idEmpresa
having
min(idservicio) != max(idservicio)
go


AMB

"JorTriFa" wrote:

Hola a todos,

Tengo la siguiente consulta (quiero todas las emrpesas que realizan el
servicio 102 y 104):

SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio = 102
INTERSECT
SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio = 104

y la consuta me da un errorpuedo utilizar la sentencia INTERSECT??

Existe otra forma de hacerlo?

La tabla, tiene los siguientes valores: (se supone que me deberia dar las
empresas 13 y 15)

idEmpresa idservicio
11 101
11 102
11 201
11 202
11 204
11 205
12 102
12 103
13 101
13 102
13 104
14 101
14 201
14 202
14 204
14 401
15 102
15 104
15 201
15 204

Gracias a to2



Respuesta Responder a este mensaje
#8 Alejandro Mesa
23/05/2005 - 19:16 | Informe spam
Maxi,

SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio in(102,104)



Este query te daria las filas donde la columna idservicio es igual a 102 ó
104, pero eso no asegura que tengan los dos 102 y 104.


AMB

"Maxi" wrote:

Hola, insersec? que es eso? para hacer eso seria mas simple asi:

SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio in(102,104)



Salu2
Maxi


"JorTriFa" escribió en el mensaje
news:
> Hola a todos,
>
> Tengo la siguiente consulta (quiero todas las emrpesas que realizan el
> servicio 102 y 104):
>
> SELECT idEmpresa
> FROM ServiciosRealizaEmpresa
> WHERE idservicio = 102
> INTERSECT
> SELECT idEmpresa
> FROM ServiciosRealizaEmpresa
> WHERE idservicio = 104
>
> y la consuta me da un errorpuedo utilizar la sentencia INTERSECT??
>
> Existe otra forma de hacerlo?
>
> La tabla, tiene los siguientes valores: (se supone que me deberia dar las
> empresas 13 y 15)
>
> idEmpresa idservicio
> 11 101
> 11 102
> 11 201
> 11 202
> 11 204
> 11 205
> 12 102
> 12 103
> 13 101
> 13 102
> 13 104
> 14 101
> 14 201
> 14 202
> 14 204
> 14 401
> 15 102
> 15 104
> 15 201
> 15 204
>
> Gracias a to2
>
>



Respuesta Responder a este mensaje
#9 Alejandro Mesa
23/05/2005 - 19:52 | Informe spam
Maxi,

Para asegurar que ambos servicios estan siendo usados puedes usar algo asi
como:

...
having count(distinct idservicio) = 2

o tambien puedes usar en este caso (solamente son dos servicios):

...
having min(idservicio) != max(idservicio)

sin necesidad de hacer una union.


Ejemplo:

select
idEmpresa
from
t1
where
idservicio in (102, 104)
group by
idEmpresa
having
min(idservicio) != max(idservicio)
go


select
idEmpresa
from
t1
where
idservicio in (102, 104)
group by
idEmpresa
having
count(distinct idservico) = 2
go


AMB

"Maxi" wrote:

Hola, entendido, entonces podemos usar algo asi como

SELECT T.IDEMPRESA,COUNT(*) FROM

(SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio In = 102
UNION ALL
SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio In = 104) T
GROUP BY T.IDEMPRESA
HAVING COUNT(*) = 2






Salu2
Maxi


"JorTriFa" escribió en el mensaje
news:
> Ya pero si lo hago con << where idservicio in(102,104) >> me da todas las
> empresas que realizan el servicio 102 -o- 104 y yo lo que quiero es las
> que
> hagan el servicio 102 -y- 104
>
>
> "Eleazar" escribió en el mensaje
> news:%
>> en lugar de la instruccion intersect remplazala por la instruccion union
>> o prueba con esto
>> SELECT Distinct idEmpresa
>> FROM ServiciosRealizaEmpresa
>> WHERE idservicio In (102, 104)
>> suerte
>>
>> "JorTriFa" escribió en el mensaje
>> news:
>> > Hola a todos,
>> >
>> > Tengo la siguiente consulta (quiero todas las emrpesas que realizan el
>> > servicio 102 y 104):
>> >
>> > SELECT idEmpresa
>> > FROM ServiciosRealizaEmpresa
>> > WHERE idservicio = 102
>> > INTERSECT
>> > SELECT idEmpresa
>> > FROM ServiciosRealizaEmpresa
>> > WHERE idservicio = 104
>> >
>> > y la consuta me da un errorpuedo utilizar la sentencia INTERSECT??
>> >
>> > Existe otra forma de hacerlo?
>> >
>> > La tabla, tiene los siguientes valores: (se supone que me deberia dar
> las
>> > empresas 13 y 15)
>> >
>> > idEmpresa idservicio
>> > 11 101
>> > 11 102
>> > 11 201
>> > 11 202
>> > 11 204
>> > 11 205
>> > 12 102
>> > 12 103
>> > 13 101
>> > 13 102
>> > 13 104
>> > 14 101
>> > 14 201
>> > 14 202
>> > 14 204
>> > 14 401
>> > 15 102
>> > 15 104
>> > 15 201
>> > 15 204
>> >
>> > Gracias a to2
>> >
>> >
>>
>>
>
>



Respuesta Responder a este mensaje
#10 Alejandro Mesa
23/05/2005 - 19:55 | Informe spam
Esta operación se conoce como "relational division". Te paso un link sobre el
tema, lastima que no lo tengo en español.

Relational Divisio
http://www.dbazine.com/ofinterest/o...20division


AMB

"Maxi" wrote:

Hola, entendido, entonces podemos usar algo asi como

SELECT T.IDEMPRESA,COUNT(*) FROM

(SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio In = 102
UNION ALL
SELECT idEmpresa
FROM ServiciosRealizaEmpresa
WHERE idservicio In = 104) T
GROUP BY T.IDEMPRESA
HAVING COUNT(*) = 2






Salu2
Maxi


"JorTriFa" escribió en el mensaje
news:
> Ya pero si lo hago con << where idservicio in(102,104) >> me da todas las
> empresas que realizan el servicio 102 -o- 104 y yo lo que quiero es las
> que
> hagan el servicio 102 -y- 104
>
>
> "Eleazar" escribió en el mensaje
> news:%
>> en lugar de la instruccion intersect remplazala por la instruccion union
>> o prueba con esto
>> SELECT Distinct idEmpresa
>> FROM ServiciosRealizaEmpresa
>> WHERE idservicio In (102, 104)
>> suerte
>>
>> "JorTriFa" escribió en el mensaje
>> news:
>> > Hola a todos,
>> >
>> > Tengo la siguiente consulta (quiero todas las emrpesas que realizan el
>> > servicio 102 y 104):
>> >
>> > SELECT idEmpresa
>> > FROM ServiciosRealizaEmpresa
>> > WHERE idservicio = 102
>> > INTERSECT
>> > SELECT idEmpresa
>> > FROM ServiciosRealizaEmpresa
>> > WHERE idservicio = 104
>> >
>> > y la consuta me da un errorpuedo utilizar la sentencia INTERSECT??
>> >
>> > Existe otra forma de hacerlo?
>> >
>> > La tabla, tiene los siguientes valores: (se supone que me deberia dar
> las
>> > empresas 13 y 15)
>> >
>> > idEmpresa idservicio
>> > 11 101
>> > 11 102
>> > 11 201
>> > 11 202
>> > 11 204
>> > 11 205
>> > 12 102
>> > 12 103
>> > 13 101
>> > 13 102
>> > 13 104
>> > 14 101
>> > 14 201
>> > 14 202
>> > 14 204
>> > 14 401
>> > 15 102
>> > 15 104
>> > 15 201
>> > 15 204
>> >
>> > Gracias a to2
>> >
>> >
>>
>>
>
>



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