Select anidados no referenciados

Buenos días.

Estoy creando una app en la que hay productos que tienen varios precios de compra según el proveedor.

Básicamente tengo las tablas:
-Categorías
-Subcategorias (con campo IdCat con relación a Categorías)
-Proveedores
-ProvYCat (con campos IdProveedor IdCat en la que asigno categorías varias a cada proveedor)
-Productos (con campo IdSubCat para relación a Subcategorías)
-ProductosXProveedor (con campos IdProveedor IdProducto PrecioProv) que es la tabla que finalmente iré poblando y en la que buscaré el precio según el pedido que le haga al proveedor.

La lógica es: agrego proveedores, categorías, subcategorías (perteneciente a categorías), productos (que pertenecen a una subcategoría). Luego las de relación: ProvYCat que asigno 1 o más categorías a cada proveedor para que finalmente en el formulario de la relación ProductosXProveedor pueda seleccionar un proveedor y obtenga todos los productos cuya subcategoría pertenezcan a las categorías que se relacionan en ProvYCat (es bastante complejo) y de esta forma agregar precio de los productos que yo quiera.


La consulta es la siguiente: Necesito seleccionar un proveedor (ya referenciado a la tabla proveedores) y que por medio de selects anidados obtenga todos los productos disponibles de ese proveedor.
Productos tiene [IdSubCat] entre su columnas la cual me sirve como condición en la tabla SubCategorias [IdSubCat] para extraer [IdCat] que sirve como condición en la tabla ProvYCat [IdCat] en la tabla ProvYCat también se encuentra [IDProveedor] que es finalmente por lo único que pregunto en el formulario para cerrar la consulta:

SELECT (Productos [IdProducto],
                         Productos[IdSubCat]=(SELECT(SubCategorias [IdSubCat],
                                        SubCategorias[IdCat]=(SELECT(ProvYCat [IdCat],
                                                    ProvYCat [IdProveedor]=[_THISROW].[IdProv]))
                                                                           ))
                 )

Error al aplicar la fórmula: Cannot compare List with Ref in (ProvYCat[IdProveedor] = [_THISROW].[IdProveedor])

Tengo varias tablas que presento más abajo

 CATEGORIAS 
SUBCATEGORIAS
 PRODUCTOS
 IdCat IdSubCat IDProducto
 Categoria IdCat Descripcion
   SubCategoria IdSubCat
     PrecioVenta
 ProvYCat   TeclaBascula
 ID   Unidad
 IdProveedor   CambioPrecio
 IdCat    
      
      
 
PROVEEDORES
    
 IDProveedor    
 Empresa    
 Comercial    
 Telefono1    

GabrielP_0-1653561768641.png

GabrielP_1-1653563994325.png

La fórmula está en el apartado Data validity - Valid If de la columna IdProducto de la tabla ProductosXProveedor.

Si se puede se comenta algo sino al igual deba dedicarme a otro hobby.

Gracias saludos

 

Solved Solved
0 4 509
2 ACCEPTED SOLUTIONS

Que tal Gabriel.

No entendí muy bien que es lo que quieres hacer exactamente, pero el error que manda (Cannot compare List with Ref in (ProvYCat[IdProveedor] = [_THISROW].[IdProveedor]))es que estás tratando de comparar un solo elemento contra un SELECT que da como resultado una lista.

Para que te regrese un solo elemento, puedes probar usando ANY(SELECT ()) o poniendo el último parametro del SELECT a true.

Si lo que buscas es ver si un elemento está en una lista, puedes ver también el comando IN().

Espero que te sea de ayuda.

Saludos.

 

 

View solution in original post

Muchas gracias.

Lo probaré así entonces.

 

View solution in original post

4 REPLIES 4

Steve
Platinum 4
Platinum 4

Your SELECT() statements are entirely wrong. I suggest you spend some more time learning how they work.

SELECT() - AppSheet Help

 

Que tal Gabriel.

No entendí muy bien que es lo que quieres hacer exactamente, pero el error que manda (Cannot compare List with Ref in (ProvYCat[IdProveedor] = [_THISROW].[IdProveedor]))es que estás tratando de comparar un solo elemento contra un SELECT que da como resultado una lista.

Para que te regrese un solo elemento, puedes probar usando ANY(SELECT ()) o poniendo el último parametro del SELECT a true.

Si lo que buscas es ver si un elemento está en una lista, puedes ver también el comando IN().

Espero que te sea de ayuda.

Saludos.

 

 

Hola. Gracias por la pronta respuesta.
La idea es que como sucede en las listas anidadas en las que vas
seleccionando un valor de una y a la siguiente lista ya viene "filtrada"
pero en este caso hacer la cascada sin estar seleccionando cada lista.
Entonces con solo seleccionar un proveedor que me traiga los productos
varios.
Pero igualmente voy a ir probando como indicas con TRUE o en su caso con
IN.
Gracias saludos

Muchas gracias.

Lo probaré así entonces.

 

Top Labels in this Space