Foros del Web » Programando para Internet » ASP Clásico »

Crear subconsulta sql medio compleja.

Estas en el tema de Crear subconsulta sql medio compleja. en el foro de ASP Clásico en Foros del Web. Bueno, ojalá me puedan ayudar para resolver esto que me está volviendo loco. Bueno necesito obtener datos de 2 tablas, una de ellas se llama ...
  #1 (permalink)  
Antiguo 05/12/2005, 10:58
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
Crear subconsulta sql medio compleja.

Bueno, ojalá me puedan ayudar para resolver esto que me está volviendo loco. Bueno necesito obtener datos de 2 tablas, una de ellas se llama productos y la otra se llama movimiento_productos.

Lo que requiero, me imagino se puede hacer en una sentencia sql pero mi cabeza no da para más.

Por ahora lo hago en 2 sentencias y requiriendo 2 recordset.

la idea es esta :

1.- Determinar criterio de la tabla primaria con la secundaria.
2.- determinar la suma de entradas - salidas para el inventario de unicamente el criterio anterior.

Mi sentencia actualmente es :

SELECT DISTINCT p.clave_interna, c.nombre_linea, p.descripcion, p.id_almacen, p.stock_minimo, p.clave_usuario
FROM productos p INNER JOIN
movimiento_productos m ON p.clave_interna = m.clave_interna INNER JOIN
control_linea c ON p.id_linea = c.id_linea
WHERE (p.descripcion LIKE '%teclado%') AND (p.descripcion LIKE '%xp%') AND (NOT (p.id_proveedor = 0)) AND (NOT (p.id_linea = 0)) AND (NOT (p.moneda = 0))
AND (NOT (p.id_almacen = 0)) AND (m.fecha_movimiento = '01-01-2005') AND (m.concepto = 5)
ORDER BY p.descripcion

Despues realizo otra sentencia que saca el inventario de cada producto.

Se podrá simplificar esto en una sola para solo usar un recordset ???
  #2 (permalink)  
Antiguo 05/12/2005, 12:46
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Hola master, a reserva de ver la estructura, se me ocurre que podrías hacer lo siguiente:

SELECT DISTINCT p.clave_interna, c.nombre_linea, p.descripcion, p.id_almacen, p.stock_minimo, p.clave_usuario, (SELECT COUNT(campo) FROM tabla WHERE [CONDICIONES] - [el criterio a restar]) AS campo_existencias
.
.
.

Solo una idea.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 05/12/2005, 13:18
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
Hola U_goldman, gracias por contestar.
Mira la sentencia sql 2 que determina los inventarios es :

select SUM(m.entrada_unidad) - SUM(m.salida_unidad) as inventario from
movimiento_productos m where m.clave_interna= clave_interna_primera_sentencia_sql

Ahora bien, no consigo obtener el inventario de cada producto, .


Me ayudarias armar la sentencia, ?

Intente esto :

SELECT p.clave_interna,
(SELECT SUM(entrada_unidad)
FROM movimiento_productos m, productos p
WHERE m.clave_interna = p.clave_interna) AS inventario
FROM productos p INNER JOIN
movimiento_productos m ON p.clave_interna = m.clave_interna

pero me saca la suma total y se repite en cada producto el total, mas no de cada uno individualmente.

De antemano gracias master.
  #4 (permalink)  
Antiguo 05/12/2005, 13:34
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Hola de nuevo, ya trataste algo como esto?

SELECT DISTINCT p.clave_interna, c.nombre_linea, p.descripcion, p.id_almacen, p.stock_minimo, p.clave_usuario, (select SUM(m.entrada_unidad) - SUM(m.salida_unidad) as inventario from
movimiento_productos m where m.clave_interna=p.clave_interna) AS exitencias

FROM productos p INNER JOIN
movimiento_productos m ON p.clave_interna = m.clave_interna INNER JOIN
control_linea c ON p.id_linea = c.id_linea
WHERE (p.descripcion LIKE '%teclado%') AND (p.descripcion LIKE '%xp%') AND (NOT (p.id_proveedor = 0)) AND (NOT (p.id_linea = 0)) AND (NOT (p.moneda = 0))
AND (NOT (p.id_almacen = 0)) AND (m.fecha_movimiento = '01-01-2005') AND (m.concepto = 5)
ORDER BY p.descripcion

creo que deberia funcionar.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 05/12/2005, 13:42
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
Master. No cabe duda de que el que sabe sabe.
Me quito el sombrero. Confiaba en ti y una vez más has acertado a la pregunta con una respuesta concisa.

Hombre, este foro es lo que es por personas como tú.

Mil gracias master....

You rule..
  #6 (permalink)  
Antiguo 05/12/2005, 13:47
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Bueno, pues que bien que funciono...fue pura suerte!

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 05/12/2005, 17:33
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
Master,otra vez me da pena molestarte pero, si por ejemplo quiero mostrar solo aquellos productos donde el inventario = 15 según mi lógica :

SELECT DISTINCT p.clave_interna AS x, c.nombre_linea, p.descripcion, p.id_almacen, p.stock_minimo, p.clave_usuario,
(SELECT SUM(m.entrada_unidad) - SUM(m.salida_unidad)
FROM movimiento_productos m
WHERE m.clave_interna = p.clave_interna) AS inventario
FROM productos p INNER JOIN
movimiento_productos m ON p.clave_interna = m.clave_interna INNER JOIN
control_linea c ON p.id_linea = c.id_linea
WHERE (inventario= 15)

Me dice que no se reconoce la fila, lo intente asi :

(SELECT SUM(m.entrada_unidad) - SUM(m.salida_unidad)
FROM movimiento_productos m
WHERE m.clave_interna = p.clave_interna
GROUP BY p.clave_interna
HAVING SUM(m.entrada_unidad) - SUM(m.salida_unidad) = 15) AS inventario


Y funciiona pero me muestra los productos aunque en el campo inventario a parezca NULL

Master cómo le podría hacer ??
  #8 (permalink)  
Antiguo 05/12/2005, 17:55
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98


Si master, porque en realidad no es un campo al que podamos hacer query, solo es un agregado, se me ocurre que deberia funcionar, agregando la misma consulta en el WHERE

SELECT DISTINCT p.clave_interna, c.nombre_linea, p.descripcion, p.id_almacen, p.stock_minimo, p.clave_usuario, (select SUM(m.entrada_unidad) - SUM(m.salida_unidad) as inventario from
movimiento_productos m where m.clave_interna=p.clave_interna) AS exitencias
FROM productos p INNER JOIN
movimiento_productos m ON p.clave_interna = m.clave_interna INNER JOIN
control_linea c ON p.id_linea = c.id_linea
WHERE (p.descripcion LIKE '%teclado%') AND (p.descripcion LIKE '%xp%') AND (NOT (p.id_proveedor = 0)) AND (NOT (p.id_linea = 0)) AND (NOT (p.moneda = 0))
AND (NOT (p.id_almacen = 0)) AND (m.fecha_movimiento = '01-01-2005') AND (m.concepto = 5) AND ((select SUM(m.entrada_unidad) - SUM(m.salida_unidad) as inventario from
movimiento_productos m where m.clave_interna=p.clave_interna) =15)

ORDER BY p.descripcion

Y ahora que lo pienso, si pones el query en el WHERE no lo necesitas como otro campo, porque ya sabes que tiene 15


A ver si funciona.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 05/12/2005, 17:59
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
Cuando vengas a méxico sabré recompensar tu ayuda jejejeje

Última edición por orharo2003; 24/10/2006 a las 16:32
  #10 (permalink)  
Antiguo 05/12/2005, 18:09
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Ya dijiste!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 23:41.