Question:
Date: 22-10-2022 03:46:37
(In Spanish)
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 ... Votes: 0 - Answers: 12 - Views: 8 Share on: Google Facebook Twitter LinkedIn Link
Problemas con una consulta MySQL ...[Resolved]
Hola gente, saludos a todosEste 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 ... Votes: 0 - Answers: 12 - Views: 8 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: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