SQL - Listar hasta que se cumpla una condicion

 
Vista:
sin imagen de perfil

Listar hasta que se cumpla una condicion

Publicado por Gabriel (4 intervenciones) el 03/10/2016 20:51:22
Buenas.

Necesito que el SELECT me devuelva una cierta cantidad de filas hasta que se cumpla una condición. Tengo una base de datos con productos y sus saldos en stock en kilos. Quisiera traer filas , hasta que los kilos de las filas sumados alcancen un cierto valor. Ej:

Producto kilos Lote
PROD000001 30 LOT000001
PROD000001 20 LOT000002
PROD000001 40 LOT000003

Como hago si quiero que devuelva las dos primeras filas que suman 50 kilos? La consulta devería devolver:

Producto kilos Lote
PROD000001 30 LOT000001
PROD000001 20 LOT000002

Desde ya muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Listar hasta que se cumpla una condicion

Publicado por Isaias (1921 intervenciones) el 04/10/2016 00:35:39
¿En que motor de base de datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Listar hasta que se cumpla una condicion

Publicado por Gabriel (4 intervenciones) el 04/10/2016 00:39:57
Hola Isaias.

Uso SQL Server.

Gracias por tu interes!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Listar hasta que se cumpla una condicion

Publicado por Isaias (1921 intervenciones) el 04/10/2016 17:52:49
La instruccion que debes utilizar es TOP(2), aunque no mas detalles, si tu tabla tiene mas registros, ¿porque 50 kilos?, ¿como determinas que sean solamente 50 kilos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Listar hasta que se cumpla una condicion

Publicado por Gabriel (4 intervenciones) el 04/10/2016 17:57:31
En realidad es un ejemplo, deberia poder poner los kilos que se necesiten en ese momento. Y tambien hay muchos otros productos. eso es solo un ejemplo de como es la estructura de la BD. No me sirve el top, ya que los kilos cambian constantemente, y la cantidad de lotes tambien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Listar hasta que se cumpla una condicion

Publicado por leonardo_josue (1173 intervenciones) el 04/10/2016 23:33:43
Hola Gabriel:

Tienes varias formas de resolver lo que quieres, pero depende también de cómo tienes organizada tu información.

Se me ocurre por ejemplo que obtengas las sumas acumuladas para cada registro mediante una subconsulta, pero esto implicaría que pudieras "numerar" u ordenar los lotes, por ejemplo como un consecutivo. Supongamos que tu información la tienes así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+------------+-------+-----------+
|idProducto  |kilos  | lote      |
+------------+-------+-----------+
| PROD000001 | 30    | 1         |
+------------+-------+-----------+
| PROD000001 | 20    | 2         |
+------------+-------+-----------+
| PROD000001 | 40    | 3         |
+------------+-------+-----------+
| PROD000001 | 10    | 4         |
+------------+-------+-----------+
| PROD000002 | 40    | 1         |
+------------+-------+-----------+
| PROD000002 | 10    | 2         |
+------------+-------+-----------+
| PROD000002 | 20    | 3         |
+------------+-------+-----------+

Con esta información, puedes obtener una subconsulta para calcular la suma acumulada hasta el número de lote que estés analizando, es decir, algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
select
  idProducto,
  kilos,
  lote,
  ( select sum(kilos)
    from tabla T2
    where
      T2.idProducto = T1.idProducto
      and T2.lote <= T1.lote) acumulado
from tabla T1;
 
+------------+-------+-----------+-----------+
|idProducto  |kilos  | lote      | acumulado |
+------------+-------+-----------+-----------+
| PROD000001 | 30    | 1         | 30        |
+------------+-------+-----------+-----------+
| PROD000001 | 20    | 2         | 50        |
+------------+-------+-----------+-----------+
| PROD000001 | 40    | 3         | 90        |
+------------+-------+-----------+-----------+
| PROD000001 | 10    | 4         | 100       |
+------------+-------+-----------+-----------+
| PROD000002 | 40    | 1         | 40        |
+------------+-------+-----------+-----------+
| PROD000002 | 10    | 2         | 50        |
+------------+-------+-----------+-----------+
| PROD000002 | 20    | 3         | 70        |
+------------+-------+-----------+-----------+

y a partir de esto filtrar lo que te interese.

Dale un vistazo y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Listar hasta que se cumpla una condicion

Publicado por Isaias (1921 intervenciones) el 05/10/2016 01:12:59
Excelente Leo, asi lo pensaba desarrollar, desafortunadamente, considero que la duda esta mal planteada, en un rato te dira que no son 50, que pueden ser 25.

Creo que lo que quiere es poder obtener el total de un PRODUCTO a SURTIR.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Listar hasta que se cumpla una condicion

Publicado por Gabriel (4 intervenciones) el 05/10/2016 13:25:14
Gracias por contestar!

Como dije mas arriba, 50 kilos era solo un ejemplo. El tema es así: tengo un depósito de materia prima, donde están los lotes de producto y su cantidad de kilos correspondiente. Hay cientos de productos, y por cada producto puede haber muchos lotes, que se van consumiendo, a medida que voy transfiriendo. Los lotes van cambiando siempre en el deposito. La materia prima cuando ingresa, se le asigna un numero de lote, y cuando es transferida, ese lote desaparece de ese depósito. El numero de lote es automático, y único. Yo debería poder insertar en un campo la cantidad de kilos que se necesitan transferir a otro deposito y en otro campo el producto. La respuesta de la consulta seria que lotes debo transferir para llegar a la cantidad deseada. O sea, pondría producto: PROD000001 Kilos: 50. Y la devolución de la consulta, según el ejemplo de leonardo_josue, sería:

+---------------+-------+-----------+
|idProducto |kilos | lote |
+-------------------+-------+-------+
| PROD000001 | 30 | 1 |
+-------------------+-------+-------+
| PROD000001 | 20 | 2 |
+-------------------+-------+-------+


Espero haberme explicado bien.

Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar