Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta en otra consulta...

Estas en el tema de Consulta en otra consulta... en el foro de SQL Server en Foros del Web. Buenas Tardes! a todos, de antemano agradesco la labor que realizan tratando de ayudar a perosnas que apenas se estan iniciando... Mi pregunta seria la ...
  #1 (permalink)  
Antiguo 24/02/2010, 18:32
Avatar de hugo180486  
Fecha de Ingreso: septiembre-2007
Mensajes: 199
Antigüedad: 16 años, 7 meses
Puntos: 3
Consulta en otra consulta...

Buenas Tardes! a todos, de antemano agradesco la labor que realizan tratando de ayudar a perosnas que apenas se estan iniciando...

Mi pregunta seria la siguiente, es posible realizar una consulta dentro de otra...

Tratare de explicar con ejemplos. M... Hay 2 Tablas en la primera se tiene un Articulo y el Material que lleva un articulo... Ej..

Tabla Articulos y Materiales
Articulo----------------------------Material
Dulce de Leche-------------------Azucar
Cocada-----------------------------Azucar
Paleta de fresa-------------------Azucar
Jugo de fresa--------------------- Agua

Primero quisiera saber que Articulos llevan Azucar en su material...
Esto ps si facil una simple consulta con la condicion de que Material = Azucar...


Ahora viene la siguiente Tabla

Tabla Ordenes de Venta
Articulo-----------------------Fecha
Dulce de Leche------------02/22/10
Cocada---------------------02/23/10
Paleta de fresa-----------02/26/10
Jugo de fresa-------------02/12/10
Dulce de Leche-----------02/22/10
Cocada---------------------02/12/10
Paleta de fresa-----------02/29/10
Azucar----------------------02/22/10

Yo quisiera saber que materiales utilizan azucar... en este caso serian
Dulce de Leche--------Azucar
Cocada-----------------Azucar
Paleta de fresa--------Azucar

Y de esos 3 registros (Por poner un ejemplo en realidad serian muchos mas), obtener la Orden de venta mas a futuro, en este caso seria la de la paleta de fresa de la siguiente fecha 02/29/10, tomando en cuenta la del Azucar, pues tambien se venderia....

Esto es posible?
  #2 (permalink)  
Antiguo 25/02/2010, 08:45
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta en otra consulta...

Podrias hacerlo a la inversa:
1. obtener el ultimo articulo
2. dejar los articulos cuyo material sea el azucar
Sería asi:
Código SQL:
Ver original
  1. SELECT OV.Articulo, MAX(OV.Fecha)
  2. FROM [Ordenes de Venta] OV
  3. INNER JOIN [Articulos y Materiales] AM ON OV.Articulo = A.Articulo
  4. WHERE AM.Material = 'Azucar'
  5. GROUP BY OV.Articulo
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 25/02/2010, 16:16
Avatar de hugo180486  
Fecha de Ingreso: septiembre-2007
Mensajes: 199
Antigüedad: 16 años, 7 meses
Puntos: 3
Exclamación Respuesta: Consulta en otra consulta...

A ok si funciona, pero ahora la pregunta seria y si tambien quiero incluir el 'Azucar' tambien viene en las ordenes de compra, y puede que la fecha que tiene el azucar sea mayor que el de los otros articulos, conozco poco de SQL e intene adaptar lo que me respondiste, pero no obtuve resultado alguno.

SELECT OV.Articulo, MAX(OV.Fecha)
FROM [Ordenes de Venta] OV
INNER JOIN [Articulos y Materiales] AM ON OV.Articulo = AM.Articulo
WHERE AM.Material = 'Azucar' AND OV.Articulo = 'Azucar' ---> No me funciono
GROUP BY OV.Articulo

Estuve haciendolo a prueba y error intentando varias convinaciones, pero nada mas no doy con bola... Es posible incluir lo que te digo?
  #4 (permalink)  
Antiguo 26/02/2010, 10:33
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta en otra consulta...

Prueba asi:
Código SQL:
Ver original
  1. SELECT OV.Articulo, MAX(OV.Fecha)
  2. FROM [Ordenes de Venta] OV
  3. LEFT JOIN [Articulos y Materiales] AM ON OV.Articulo = A.Articulo
  4. WHERE AM.Material = 'Azucar' OR OV.Articulo = 'Azucar'
  5. GROUP BY OV.Articulo
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 26/02/2010, 14:12
Avatar de hugo180486  
Fecha de Ingreso: septiembre-2007
Mensajes: 199
Antigüedad: 16 años, 7 meses
Puntos: 3
Respuesta: Consulta en otra consulta...

Fijate que tambien lo intenete, me regresa no me regresa el "Azucar", solo los que contienen el "Azucar", Saludos...
  #6 (permalink)  
Antiguo 28/02/2010, 13:06
 
Fecha de Ingreso: enero-2010
Ubicación: SJM Lima - Peru
Mensajes: 55
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Consulta en otra consulta...

Cita:
Iniciado por hugo180486 Ver Mensaje
Fijate que tambien lo intenete, me regresa no me regresa el "Azucar", solo los que contienen el "Azucar", Saludos...
Hola lo que quiero entenderte es que quieres buscar ya sea por un material o por un articulo o la combinacion de ambos un valor dado en este caso la azucar.
La azucar se encuentra como registro tambien en la tabla articulos y materiales.
Ah otra cosa como sugerencia quizas debas considerar no usar espacios o tildes para nombrar tablas o campos.
Código vb:
Ver original
  1. SELECT OV.Articulo, MAX(OV.Fecha)
  2.    FROM [Ordenes de Venta] OV LEFT JOIN [Articulos y Materiales] AM
  3.    ON OV.Articulo = AM.Articulo
  4.    WHERE AM.Material + OV.Articulo LIKE  '%Azucar%'
  5.   GROUP BY OV.Articulo
Lo que en teoria haces con este WHERE es que concatenas dos campos/cadenas(a+b=ab) y obtienes un campo/cadena, solo para que le apliques like con los comodines % y busque la palabra clave en cualquier parte de la nueva cadena

www.bitxense.com.pe | Soluciones Informaticas S.A.C. - [email protected]
Cualquier duda soy Jhon Bautista Palomino aqui esta mi correo [email protected] Lima-Peru
  #7 (permalink)  
Antiguo 03/03/2010, 10:16
Avatar de hugo180486  
Fecha de Ingreso: septiembre-2007
Mensajes: 199
Antigüedad: 16 años, 7 meses
Puntos: 3
De acuerdo Respuesta: Consulta en otra consulta...

Disculpas por la tardanza... y especialmente para Flaviovich por que fui un distraido y no cheque bien la segunda opcion que me presento, la cual acabo de probar (Me faltaba cambiar e INNER por LEFT), y si me funciono...

SELECT OV.Item, MAX(OV.semana_DT) as Fecha
FROM [tblOrder_Allocations] OV
LEFT JOIN [tblPru] AM ON (OV.Item = AM.Item)
WHERE (AM.Matl_Item = 'M-30004110') OR OV.Item = 'M-30004110'
GROUP BY OV.Item
ORDER BY fecha DESC

Para la ultima aportcacion quise hacer la prueba pero me marcaba error de SIntaxis...

Las tablas se pusieron con espacios por ser un ejemplo de la problematica, arriba se pueden ver los datos "reales" que se usaron...

Gracias por la ayuda prestada...

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:00.