New question

Question:

Date: 22-10-2022 03:46:37 (In Spanish)

Problemas con una consulta MySQL ...[Resolved]

Hola gente, saludos a todos

Este el planteo:

Tengo 3 TABLAS

1.- TABLA "ventas"
2.- TABLA "compras"
3.- TABLA "dj_iva"

Deseo obtener en una sola consulta, todas las ventas y todas las compras por Periodo Fiscal iguales a los Periodos Fiscales de la Tabla "dj_iva"

Ensaye esta consulta la cual no sale con los resultados esperados, ya que multiplica por 3 el total de cada periodo fiscal:

CONSULTA MySQL

SELECT dj_iva.*, SUM(ventas.ventas) AS vtas, SUM(compras.compras) AS cpras
FROM dj_iva

JOIN ventas
ON ventas.periodo_fiscal = dj_iva.periodo_fiscal
AND ventas.id_contribuyente = '1'

JOIN compras
ON compras.periodo_fiscal = dj_iva.periodo_fiscal
AND compras.id_contribuyente = '1'

WHERE dj_iva.id_contribuyente = '1'
AND ventas.periodo_fiscal = compras.periodo_fiscal
GROUP BY dj_iva.periodo_fiscal
ORDER BY dj_iva.periodo_fiscal DESC

Cualquier colaboracion, sera muy agradecida ...
Tags: MySQL Votes: 0 - Answers: 12 - Views: 5 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 22-10-2022 07:19:42 ¿podrías colocar una muestra de datos y el resultado correcto esperado?   Votes: 0 - Link answer
     
  • Date: 22-10-2022 08:05:34 Juan
    Buenas tardes
    Desde ya mil gracias por atender mi pregunta

    Esta es la data que obtengo

    id_iva PF tpfa sld ret perc ventas compras
    4 2022-11 0.00 0.00 0.00 0.00 7238.00 7238.00
    3 2022-10 0.00 0.00 0.00 0.00 7238.00 7238.00
    2 2022-09 0.00 0.00 0.00 0.00 7238.00 238.00
    1 2022-08 0.00 0.00 0.00 0.00 6694.00 238.00
    5 2022-07 0.00 0.00 0.00 0.00 6844.00 6979.00

    Quiero agrupar las compras y ventas por PERIODO FISCAL si bien lo hace .... las compras y ventas no son los valores que corresponde
      Votes: 0 - Link answer
     
  • Date: 22-10-2022 09:29:06 Lo siento si no fui claro en mi pregunta, me refería a datos de ejemplo de tus tres tablas, para entender cómo se relacionan y armar la consulta   Votes: 0 - Link answer
     
  • Date: 22-10-2022 09:53:18 Juan
    Gracias nuevamente, aqui voy:

    TABLA VENTAS

    -- phpMyAdmin SQL Dump
    -- version 4.1.14
    -- http://www.phpmyadmin.net
    --
    -- Servidor: 127.0.0.1
    -- Tiempo de generación: 22-10-2022 a las 20:52:34
    -- Versión del servidor: 5.6.17
    -- Versión de PHP: 5.5.12

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- Base de datos: `coop`
    --

    -- --------------------------------------------------------

    --
    -- Estructura de tabla para la tabla `ventas`
    --

    CREATE TABLE IF NOT EXISTS `ventas` (
    `id_ventas` int(11) NOT NULL AUTO_INCREMENT,
    `id_contribuyente` int(11) NOT NULL,
    `periodo_fiscal` varchar(9) COLLATE utf8_spanish_ci NOT NULL,
    `fecha` date NOT NULL,
    `ventas` double(10,2) NOT NULL,
    PRIMARY KEY (`id_ventas`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=236 ;

    --
    -- Volcado de datos para la tabla `ventas`
    --

    INSERT INTO `ventas` (`id_ventas`, `id_contribuyente`, `periodo_fiscal`, `fecha`, `ventas`) VALUES
    (1, 1, '2022-08', '2022-08-03', 100.00),
    (2, 1, '2022-08', '2022-08-03', 150.00),
    (3, 1, '2022-08', '2022-08-03', 50.00),
    (59, 1, '2022-09', '2022-09-03', 100.00),
    (60, 1, '2022-09', '2022-09-03', 150.00),
    (61, 1, '2022-09', '2022-09-03', 30.00),
    (117, 1, '2022-10', '2022-10-03', 100.00),
    (118, 1, '2022-10', '2022-10-03', 150.00),
    (119, 1, '2022-10', '2022-10-03', 200.00),
    (175, 1, '2022-11', '2022-11-03', 100.00),
    (176, 1, '2022-11', '2022-11-03', 150.00),
    (177, 1, '2022-11', '2022-11-03', 200.00),
    (233, 1, '2022-07', '2022-07-03', 100.00),
    (234, 1, '2022-07', '2022-07-03', 150.00),
    (235, 1, '2022-07', '2022-07-03', 40.00);

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
      Votes: 0 - Link answer
     
  • Date: 22-10-2022 09:54:01 TABLA COMPRAS

    -- phpMyAdmin SQL Dump
    -- version 4.1.14
    -- http://www.phpmyadmin.net
    --
    -- Servidor: 127.0.0.1
    -- Tiempo de generación: 22-10-2022 a las 20:53:45
    -- Versión del servidor: 5.6.17
    -- Versión de PHP: 5.5.12

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- Base de datos: `coop`
    --

    -- --------------------------------------------------------

    --
    -- Estructura de tabla para la tabla `compras`
    --

    CREATE TABLE IF NOT EXISTS `compras` (
    `id_compras` int(11) NOT NULL AUTO_INCREMENT,
    `id_contribuyente` int(11) NOT NULL,
    `periodo_fiscal` varchar(9) COLLATE utf8_spanish_ci NOT NULL,
    `fecha` date NOT NULL,
    `compras` double(10,2) NOT NULL,
    PRIMARY KEY (`id_compras`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=286 ;

    --
    -- Volcado de datos para la tabla `compras`
    --

    INSERT INTO `compras` (`id_compras`, `id_contribuyente`, `periodo_fiscal`, `fecha`, `compras`) VALUES
    (1, 1, '2022-08', '2022-08-03', 100.00),
    (2, 1, '2022-08', '2022-08-03', 150.00),
    (3, 1, '2022-08', '2022-08-03', 200.00),
    (59, 1, '2022-09', '2022-09-03', 100.00),
    (60, 1, '2022-09', '2022-09-03', 150.00),
    (61, 1, '2022-09', '2022-09-03', 200.00),
    (117, 1, '2022-10', '2022-10-03', 100.00),
    (118, 1, '2022-10', '2022-10-03', 150.00),
    (119, 1, '2022-10', '2022-10-03', 200.00),
    (175, 1, '2022-11', '2022-11-03', 100.00),
    (176, 1, '2022-11', '2022-11-03', 150.00),
    (177, 1, '2022-11', '2022-11-03', 200.00),
    (233, 1, '2022-07', '2022-07-03', 100.00),
    (234, 1, '2022-07', '2022-07-03', 150.00),
    (235, 1, '2022-07', '2022-07-03', 200.00);

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
      Votes: 0 - Link answer
     
  • Date: 22-10-2022 09:54:40 TABLA DJ_IVA   Votes: 0 - Link answer
     
  • Date: 22-10-2022 09:56:27 Son tres TABLAS

    VENTAS
    COMPRAS
    DJ IVA

    Las dos primera cuenta con los mism,os campos y la tercera cuenta con el campo periodo fiscal que vincula entre las 3
      Votes: 0 - Link answer
     
  • Date: 22-10-2022 14:57:39 Ya tengo la estructura de las tablas de ventas y compras, pero no pusiste la tabla dj_iva. ¿Solo tiene un campo?   Votes: 0 - Link answer
     
  • Date: 22-10-2022 16:56:30 TABLA DJ_IVA

    -- phpMyAdmin SQL Dump
    -- version 4.1.14
    -- http://www.phpmyadmin.net
    --
    -- Servidor: 127.0.0.1
    -- Tiempo de generación: 23-10-2022 a las 03:56:06
    -- Versión del servidor: 5.6.17
    -- Versión de PHP: 5.5.12

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- Base de datos: `coop`
    --

    -- --------------------------------------------------------

    --
    -- Estructura de tabla para la tabla `dj_iva`
    --

    CREATE TABLE IF NOT EXISTS `dj_iva` (
    `id_dj_iva` int(11) NOT NULL AUTO_INCREMENT,
    `id_contribuyente` int(11) NOT NULL,
    `periodo_fiscal` varchar(9) COLLATE utf8_spanish_ci NOT NULL,
    `saldo_tecnico_pfa` double(10,2) NOT NULL,
    `saldo_libre_disponibilidad` double(10,2) NOT NULL,
    `retenciones` double(10,2) NOT NULL,
    `percepciones` double(10,2) NOT NULL,
    PRIMARY KEY (`id_dj_iva`),
    UNIQUE KEY `pf` (`periodo_fiscal`),
    KEY `ret` (`retenciones`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=6 ;

    --
    -- Volcado de datos para la tabla `dj_iva`
    --

    INSERT INTO `dj_iva` (`id_dj_iva`, `id_contribuyente`, `periodo_fiscal`, `saldo_tecnico_pfa`, `saldo_libre_disponibilidad`, `retenciones`, `percepciones`) VALUES
    (1, 1, '2022-08', 0.00, 0.00, 0.00, 0.00),
    (2, 1, '2022-09', 0.00, 0.00, 0.00, 0.00),
    (3, 1, '2022-10', 0.00, 0.00, 0.00, 0.00),
    (4, 1, '2022-11', 0.00, 0.00, 0.00, 0.00),
    (5, 1, '2022-07', 0.00, 0.00, 0.00, 0.00);

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
      Votes: 0 - Link answer
     
  • Date: 24-10-2022 10:41:44 TEMA RESUELTO

    SELECT dj_iva.*,
    (SELECT SUM(ventas.ventas) FROM ventas WHERE ventas.periodo_fiscal = dj_iva.periodo_fiscal AND ventas.id_contribuyente = dj_iva.id_contribuyente) AS vtas,
    (SELECT SUM(compras.compras) FROM compras WHERE compras.periodo_fiscal = dj_iva.periodo_fiscal AND compras.id_contribuyente = dj_iva.id_contribuyente) AS cpras

    FROM dj_iva

    WHERE dj_iva.id_contribuyente = '1'
    GROUP BY dj_iva.periodo_fiscal
    ORDER BY dj_iva.periodo_fiscal DESC

    Gracias a todos
      Votes: 0 - Link answer
     
  • Date: 25-10-2022 04:40:05 Excelente, lo resolviste sin usar JOIN. Yo aún estaba quebrandome la cabeza con eso. Solo tengo una observación sobre el diseño de tus tablas: repites información en ellas (el período fiscal) y eso viola la segunda regla de normalización: tal vez debías considerar referirte a los períodos fiscales como claves externas para evitar redundancia de datos   Votes: 0 - Link answer
     
  • Date: 25-10-2022 05:53:22 Juan
    Ante todo muchas gracias por interesarte del tema
    No es que repito Periodo Fiscal, sino que es una Forest Key ... necesaria para lo que estoy haciendo
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In