SQL - Consulta para etiquetas de inventario

 
Vista:
sin imagen de perfil
Val: 8
Ha disminuido su posición en 15 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta para etiquetas de inventario

Publicado por Kaus (4 intervenciones) el 22/11/2017 15:41:45
Hola soy nuevo aquí. Aprovecho para presentarme, Kaus, programador de xojo, python y lo que venga.

La cuestión es que con Sql más o menos me defiendo bien.

Pero se me plantea una cuestión que no se como hacer:

Tengo que crear una cosulta que me arroje un registro por cada unidad de stock:
Ejemplo:
Artículo Id: 20 Stock: 2 unidades.
Artículo Id:21 Stock: 3 unidades.

Al generar la consulta deber generar 2 registro de la id 2, y 3 registros de la id 21.
Tal que así:
|Id |Nombre|
|20 |xxxx |
|20 |xxxx |
|21 |yyyy |
|21 |yyyy |
|21 |yyyy |

¿ alguna idea de como hacerlo ?

Saludos.
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

Consulta para etiquetas de inventario

Publicado por Isaias (1921 intervenciones) el 22/11/2017 16:56:15
¿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
Val: 8
Ha disminuido su posición en 15 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta para etiquetas de inventario

Publicado por Kaus (4 intervenciones) el 22/11/2017 17:44:22
Uso: MariaDB
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

Consulta para etiquetas de inventario

Publicado por leonardo_josue (1173 intervenciones) el 22/11/2017 19:31:40
Hola Kaus:

Esto es una agrupación simple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT * FROM tabla;
+------+--------+
| id   | nombre |
+------+--------+
|   20 | xxxx   |
|   20 | xxxx   |
|   21 | yyyy   |
|   21 | yyyy   |
|   21 | yyyy   |
+------+--------+
5 rows in set (0.08 sec)
 
mysql> SELECT id, COUNT(id) stock
    -> FROM tabla
    -> GROUP BY ID;
+------+-------+
| id   | stock |
+------+-------+
|   20 |     2 |
|   21 |     3 |
+------+-------+
2 rows in set (0.00 sec)

Haz la prueba 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
1
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 15 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta para etiquetas de inventario

Publicado por Kaus (4 intervenciones) el 22/11/2017 19:54:09
Hola de nuevo,

Creo que no me expliqué bien.
En el ejemplo que me das yo tengo la tabla de abajo. y necesito la de arriba de tu ejemplo.

El motivo es el siguiente. Yo tengo una vista donde está cada artículo con la cantidad de existencias(stock) y para poder generar etiquetas y poder pegarla a cada artículo necesito una consulta que genere un registro por cada unidad de stock.

Es decir yo tengo esto:
+------+-------+

| id | stock |

+------+-------+

| 20 | 2 |

| 21 | 3 |

+------+-------+

Y necesito esto:
+------+--------+

| id | nombre |

+------+--------+

| 20 | xxxx |

| 20 | xxxx |

| 21 | yyyy |

| 21 | yyyy |

| 21 | yyyy |

+------+--------+
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

Consulta para etiquetas de inventario

Publicado por leonardo_josue (1173 intervenciones) el 22/11/2017 23:12:12
Hola de nuevo Kaus:

Mea Culpa, entendí mal lo que querías... para hacer lo que quieres, tendrás que hacer uso de CICLOS y CURSORES, ya que la BD no puede "crear" información, sino que sólo consulta la información que ya existe en la BD's... no tengo instalado MariaDB, pero creo que la sintaxis debe ser muy parecida a MySQL, sería más o menos así;

Supongamos que tienes esta tabla;

1
2
3
4
5
6
7
8
mysql> SELECT * FROM tabla_1;
+------+-------+
| id   | stock |
+------+-------+
|   20 |     2 |
|   21 |     3 |
+------+-------+
2 rows in set (0.01 sec)

Entonces, puedes crear una tabla "temporal" en donde insertes los registros que necesitas, dependiendo del STOCK para cada pregunta. Debes declarar primero un CURSOR para consultar tus productos y dentro del cursor puedes usar un ciclo REPEAT para in haciendo los INSERTS a la tabla temporal, es decir, más o menos así:

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
29
30
31
32
33
34
35
36
mysql> CREATE
    ->     PROCEDURE Etiquetas()
    ->     BEGIN
    ->         DECLARE v_id INT DEFAULT 0;
    ->         DECLARE v_stock INT DEFAULT 0;
    ->         DECLARE v_contador INT DEFAULT 0;
    ->         DECLARE v_termina BOOL DEFAULT FALSE;
    ->         DECLARE c_productos CURSOR
    ->             FOR  SELECT * FROM tabla_1;
    ->         -- El handler establece a true la variable termina,
    ->         -- que usaremos a modo de bandera para saber
    ->         -- cuando termine de recorrer el cursor
    ->         DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_termina = TRUE;
    ->         -- Para crear la tabla temporal temp
    ->         DROP TABLE IF EXISTS temp;
    ->         CREATE TABLE temp (id INT, descripcion VARCHAR(20));
    ->         OPEN c_productos;
    ->         -- Para recorrer todos el cursor
    ->         Recorre_Cursor: LOOP
    ->             FETCH c_productos INTO v_id, v_stock;
    ->             IF v_termina THEN
    ->                LEAVE Recorre_Cursor;
    ->             END IF;
    ->             SET v_contador = 0;
    ->             -- Para recorrer el stock
    ->             REPEAT
    ->                 INSERT INTO temp VALUES (v_id, 'descripcion');
    ->                 SET v_contador = v_contador + 1;
    ->             UNTIL v_contador = v_stock END REPEAT;
 
    ->         END LOOP Recorre_Cursor;
    ->         CLOSE c_productos;
    ->
    ->         SELECT * FROM temp;
    ->     END$$
Query OK, 0 rows affected (0.00 sec)

Finalmente, mandamos a llamar el SP:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> CALL Etiquetas;
+------+-------------+
| id   | descripcion |
+------+-------------+
|   20 | descripcion |
|   20 | descripcion |
|   21 | descripcion |
|   21 | descripcion |
|   21 | descripcion |
+------+-------------+
5 rows in set (0.67 sec)
 
Query OK, 0 rows affected (0.69 sec)

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
2
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 15 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta para etiquetas de inventario

Publicado por Kaus (4 intervenciones) el 23/11/2017 09:22:14
¡¡¡ Magnifico !!

Ayer estuve pensando en un procedimiento almacenado, pero el tuyo es perfecto, lo he adaptado y va genial. !!

Gracias Leo. Ya solucionado.
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