Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

No logro captar la logica

Buen día

Trate de hacer el ejercicio, usando la siguiente consulta:

SELECT CONCAT("El cliente ",NOMBRE," facturo ",
    CONVERT((SELECT 
        FLOOR(SUM(B.CANTIDAD*B.PRECIO)) FROM facturas 
        A INNER JOIN items_facturas B ON A.NUMERO=B.NUMERO
        WHERE YEAR(FECHA_VENTA) = 2016),CHAR),
" en el año ")
 AS VENTAS_CLIENTES FROM tabla_de_clientes;

la consulta me muestra los siguientes registros:

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

El valor que me muestra es la suma total de ventas a clientes del 2016, más no la compra de cada cliente durante el 2016, entonces antes de concatenar, decidí realizar una consulta solo llamando las tablas facturas e items_facturas por el campo Numero:

SELECT A.NUMERO, (CONVERT(FLOOR(SUM(B.CANTIDAD*B.PRECIO)),CHAR)) AS VENTAS_2016 FROM facturas A
INNER JOIN items_facturas B
ON A.NUMERO=B.NUMERO
WHERE YEAR(FECHA_VENTA) = 2016
GROUP BY A.NUMERO;

y este es el resultado de esa consulta:

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

pero al incluir el codigo anteior para llamar a nombre, antes de concatenar

SELECT A.NOMBRE, (SELECT A.NUMERO, (CONVERT(FLOOR(SUM(B.CANTIDAD*B.PRECIO)),CHAR)) AS VENTAS_2016 FROM facturas A
INNER JOIN items_facturas B
ON A.NUMERO=B.NUMERO
WHERE YEAR(FECHA_VENTA) = 2016
GROUP BY A.NUMERO) FROM tabla_de_clientes A
INNER JOIN facturas B
ON A.DNI=B.DNI
GROUP BY A.NOMBRE, VENTAS_2016;

Me sale el siguiente error

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Decidí comenzar de 0, generando esta nueva consulta:

SELECT CONCAT("El cliente ",A.NOMBRE, " facturo ", 
    CONVERT(ROUND(SUM(B.CANTIDAD*B.PRECIO)),CHAR),
    " en el año ",
    CONVERT(YEAR(C.FECHA_VENTA),CHAR)) AS RESULTADO
FROM facturas C
INNER JOIN items_facturas B	
ON C.NUMERO=B.NUMERO
INNER JOIN tabla_de_clientes A
ON A.DNI=C.DNI
WHERE  YEAR(C.FECHA_VENTA) = 2016
GROUP BY NOMBRE, FECHA_VENTA;

y la consulta me muestra los siguientes registros, donde se repite nombre, ya no se que hacer!!!!!!!!!!!!

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola Jonathan, te comparto mi solución basada en tu ultima solucion planteada, el resultado que muestra se debe a que agrupamos por FECHA_VENTA y NOMBRE, entonces el compilador entiende que debe agrupar por fecha y nombre a pesar que especificamos el a;o, el por alguna razón entiende 2016 pero con mes y dia, es decir que un cliente puede tener varias facturas en el a;o pero con diferentes fechas ejemplo de esto Erica Carvajo 2016/01/12 X TOTAL Erica Carvajo 2016/05/12 X TOTAL mi solución a esto fue add al la clapsula group by solamente NOMBRE y eliminar el campo FECHA_VENTA DEL CONCAT /****************/ SELECT CONCAT('El cliente ', C.NOMBRE, ' facturó ', SUM(IT.CANTIDAD*IT.PRECIO), ' en el año 2016') AS RESULTADO FROM tabla_de_clientes C INNER JOIN facturas F ON C.DNI = F.DNI INNER JOIN items_facturas IT ON F.NUMERO = IT.NUMERO WHERE YEAR(F.FECHA_VENTA) = 2016 GROUP BY C.NOMBRE;