es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué SQL no me permite acceder a la información en consultas internas?

Estoy escribiendo una consulta para resolver la siguiente pregunta:

“Para aquellas combinaciones de cliente y producto donde el producto pertenece a una de las líneas de productos que tienen ‘Ethernet’ en su nombre, enumere el nombre del cliente, el nombre del producto, las ventas del año pasado y las ventas totales hasta la fecha”.

Ahora, tengo cuatro tablas que necesito utilizar para resolver esto: xproduct, xprodline, xsales y xcustomer. Estas están relacionadas de la siguiente manera:

[TABLA_DE_RELACIONES]

Y tienen las siguientes columnas:

[TABLA_DE_COLUMNAS]

Dado que xcustomer y xproduct no están directamente relacionados, estoy utilizando xsales para unirlos, pero tengo problemas para acceder a la información que obtengo de las consultas internas. Este es el código que tengo hasta ahora, pero arroja “ORA-00904: “S”.”SALES_YEAR_TO_DATE”: identificador no válido”:

SELECT xcustomer.cust_name, PL.prod_name, S.sales_last_year, S.sales_year_to_date FROM xcustomer JOIN(
SELECT xsales.sales_cust_nbr FROM xsales JOIN (
SELECT xproduct.prod_name, xprodline.prodline_pyear_sales, xprodline.prodline_ytd_sales, xproduct.prod_nbr FROM xproduct
INNER JOIN xprodline ON xproduct.prod_prodline = xprodline.prodline_nbr WHERE prod_prodline= 1
) PL ON xsales.sales_prod_nbr = PL.prod_nbr
)S ON S.sales_cust_nbr = xcustomer.cust_nbr;

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver el problema de acceso a la columna sales_year_to_date, es necesario incluirla en la subconsulta que une xproduct y xprodline. Además, es necesario agrupar los resultados por cust_name y prod_name, y sumar las columnas sales_last_year y sales_year_to_date. Aquí está el código modificado:

    SELECT xcustomer.cust_name, PL.prod_name, SUM(S.sales_last_year) AS sales_last_year, SUM(PL.prodline_ytd_sales) AS sales_year_to_date 
    FROM xcustomer
    JOIN(
        SELECT xsales.sales_cust_nbr, xsales.sales_prod_nbr, xproduct.prod_name, SUM(xprodline.prodline_pyear_sales) AS sales_last_year, SUM(xprodline.prodline_ytd_sales) AS sales_year_to_date 
        FROM xsales 
        JOIN xproduct ON xsales.sales_prod_nbr = xproduct.prod_nbr
        JOIN xprodline ON xproduct.prod_prodline = xprodline.prodline_nbr
        WHERE xprodline.prodline_name LIKE '%Ethernet%'
        GROUP BY xsales.sales_cust_nbr, xsales.sales_prod_nbr, xproduct.prod_name
    ) PL
    ON PL.sales_cust_nbr = xcustomer.cust_nbr
    GROUP BY xcustomer.cust_name, PL.prod_name;
    

    En este código, la subconsulta interna une xsales, xproduct y xprodline para obtener la información relevante de las líneas de productos que contienen ‘Ethernet’ en su nombre. Agrupa los resultados por cliente, producto e información de ventas y suma las columnas sales_last_year y sales_year_to_date.

    La consulta externa luego une los resultados de la subconsulta interna con xcustomer y agrupa los resultados por cliente y producto, mientras también suma la información de ventas para cada grupo.

    Esto debería darte la salida deseada para las combinaciones de cliente-producto donde el producto pertenezca a una línea de productos que contenga ‘Ethernet’.

Comments are closed.