Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2014
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 19
gustavosv Va por buen camino
SELECT para encontrar registros con diferentes valores en el mismo campo

Hola, para empezar, no se si el título realmente describa mi inquietud, pero bueno ...

Tengo una tabla que contiene el detalle de los pedidos con una estructura Consecutivo, NroPedido, IdProducto, Cantidad, ... un Pedido puede tener diferentes productos:

Consecutivo NroPedido IdProducto Cantidad
1 101 TORNILLO 1
2 101 TUERCA 2
3 101 BUJE 1

4 102 TUERCA 1
5 102 BOMBILLO 1

6 103 TORNILLO 5
7 103 BUJE 3
8 103 ARANDELA 5

Necesito encontrar los pedidos que contengan p.ej: TORNILLO Y TUERCA, es decir el 101

Cómo se construye ese SELECT ...?

Gracias !
Responder Con Cita
  #2  
Antiguo 17-10-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No soy el más indicado, pero, ¿algo así es lo que estás buscando?

Código SQL [-]
SELECT * FROM NombreTabla WHERE (NroPedido = 101)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 17-10-2014
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 19
gustavosv Va por buen camino
Hola dec, no me serviría porque necesito preguntar por el Producto, es decir no conozco cuales Pedidos tienen los 2 productos (de acuerdo al ejemplo).

Había intentado lo siguiente:
Código SQL [-]
SELECT * FROM NombreTabla
WHERE (IdProducto = 'TORNILLO') OR (IdProducto = 'TUERCA')

pero evidentemente el resultado son los Pedidos que tienen el Producto TORNILLO 'o' el Producto TUERCA, según el ejemplo serían el 101, 102 y 103, y lo que necesito son los Pedidos que tienen AMBOS Productos, el 101.

Ahora, si en lugar de OR utilizo AND, siempre será un resultado vacio ya que ningún Producto podría llamarse al mismo tiempo TORNILLO Y TUERCA.
Responder Con Cita
  #4  
Antiguo 17-10-2014
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 22
FGarcia Va por buen camino
Menos indicado yo!!!

Código:
SELECT * FROM NombreTabla
WHERE (IdProducto = 'TORNILLO') AND (IdProducto = 'TUERCA')
GROUP BY NroPedido
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita
  #5  
Antiguo 17-10-2014
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Se me ocurre esto, pero no sé si sirva:

Código SQL [-]
select NroPedido from pedidos p
where
  'Tornillo' in (select distinct IdProducto from pedidos q where q.NroPedido = p.NroPedido) and
  'Tuerca' in (select distinct IdProducto from pedidos q where q.NroPedido = p.NroPedido)

// Saludos
Responder Con Cita
  #6  
Antiguo 17-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gustavosv.

Otra opción:
Código SQL [-]
SELECT T1.NROPEDIDO
FROM TABLA T1
WHERE T1.IDPRODUCTO = :IDPROD1
AND EXISTS (SELECT IDPRODUCTO FROM TEST T2
            WHERE T2.NROPEDIDO = T1.NROPEDIDO AND T2.IDPRODUCTO = :IDPROD2)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 17-10-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 18
orodriguezca Va por buen camino
Usando Having

Creo que esto funcionaría :

Código SQL [-]
select R1.NROPEDIDO
  from DETPEDIDO R1
  where R1.IDPRODUCTO in ('TORNILLO', 'TUERCA')
  group by R1.NROPEDIDO
  having Count(*) >= 2; -- 2 es elnumero de diferentes idProducto buscados

También se me ocurrió esto otro, que es un poco más rebuscado, pero en ciertas situaciones puede darnos algo de flexibilidad adicional, siempre y cuando nuestro motor de bases de datos pueda realizar consultas CTE (common-table-expresion) (por lo menos Firebird, Sql Server y db2 pueden):

Código SQL [-]
with R1 as (
  select NROPEDIDO
    from DETPEDIDO 
    where IDPRODUCTO = 'TORNILLO'),
R2 as (
  select NROPEDIDO
     from DETPEDIDO
     where IDPRODUCTO = 'TUERCA'
)
select R1.NROPEDIDO
  from R1
  inner join R2
      on R1.NROPEDIDO = R2.NROPEDIDO;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo puedo hacer para que una variable valga 2 valores al mismo tiempo wlad Internet 15 19-12-2007 18:06:03
Porque me marca error en mis querys si utilizo el mismo para diferentes consultas zcatzz SQL 7 27-01-2007 13:10:37
Recorrer todos los registros de una tabla que tengan el mismo campo Sayuri Conexión con bases de datos 3 08-12-2005 16:07:46
Campo de tabla con valores con un mismo nombre kakesoft Conexión con bases de datos 14 28-11-2005 14:40:46


La franja horaria es GMT +2. Ahora son las 05:28:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi