Access - consulta simple

 
Vista:

consulta simple

Publicado por mario (53 intervenciones) el 26/08/2001 00:19:48
Hola a todos:
Tengo una tabla, que entre otros, tiene los siguientes campos:

Codigo_Producto Num_Existencias
110011 3
110012 2

¿ Como puedo hacer una consulta, sin crear una tabla intermedia, que me
devuelva tantas lineas por producto como hay en existencias. Ejemplo, en
este caso asi:

110011
110011
110011
110012
110012

Temo que pueda ser una chorrada, pero en este momento no caigo.
MUCHAS GRACIAS A TODOS.
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 Alejandro

consulta simple

Publicado por Alejandro (4142 intervenciones) el 17/04/2023 22:10:46
Para crear una consulta que devuelva una fila por cada existencia de producto en la tabla, puedes utilizar una función llamada "Generar serie numérica" en Access. Esta función se utiliza para crear una lista de números consecutivos que puedes unir a tu tabla existente para repetir cada registro según la cantidad de existencias. A continuación te muestro cómo hacerlo:

1. Abre una nueva consulta en Access y agrega tu tabla existente.

2. Agrega un campo adicional en la consulta y utiliza la función "Generar serie numérica" para crear una lista de números consecutivos. Para hacerlo, en la columna "Campo", escribe "1" y en la columna "Tabla", escribe "MSysObjects". En la columna "Alias", escribe "Num" (sin las comillas). El resultado debería verse así:

1
2
3
Codigo_Producto Num_Existencias Num
110011          3              1
110012          2              1

3. Ahora debes unir esta tabla a tu tabla existente para repetir cada registro según la cantidad de existencias. Para hacerlo, agrega una nueva columna y escribe la siguiente expresión:

1
Expr1: Mid(CStr([Num]),Len(CStr([Num])),1)

Esto devolverá el último dígito del número de la columna "Num". Esto es importante porque es el número que utilizarás para repetir cada registro. El resultado debería verse así:

1
2
3
4
5
6
Codigo_Producto Num_Existencias Num Expr1
110011          3              1   1
110011          3              2   2
110011          3              3   3
110012          2              1   1
110012          2              2   2

4. Finalmente, elimina la columna "Num" y la columna "Expr1" (si lo deseas) y agrupa por los campos restantes para obtener la lista de productos repetidos según la cantidad de existencias:

1
2
3
4
5
6
7
8
9
10
11
12
SELECT Codigo_Producto
FROM tuTablaExistente
INNER JOIN (
    SELECT 1 + [a].[id] AS [id]
    FROM MSysObjects AS a, MSysObjects AS b
    WHERE (((a.id)=[b].[id]))
        AND ((a.type)=1)
        AND ((b.type)=1)
        AND ((a.id) In (SELECT TOP 1 id FROM MSysObjects ORDER BY id))
        ORDER BY 1
) AS Nums ON tuTablaExistente.Num_Existencias >= Nums.id
GROUP BY Codigo_Producto

Este código unirá la tabla existente con la lista generada por la función "Generar serie numérica" y filtrará los registros según la cantidad de existencias. Luego agrupará por el campo "Codigo_Producto" para devolver la lista de productos repetidos según la cantidad de existencias.
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