【发布时间】:2021-07-07 09:42:32
【问题描述】:
我正在开发 wms 软件,我编写 SQL 来计算仓库中的物品库存。在表中,我记录了出库和存货值,如果出库则为负值,如果仓库中收到的项目值为正。在同一张表中,我也记录了库存控制。所以,我需要 SQLquery 对所有项目的库存求和,如果有相同 id 的库存控制,那么如果找到 SUM 表达式一个库存控制行,SUM 表达式需要等于库存控制值和恢复总和。
所以当 SUM 表达式遇到控件行时,我需要从最新控件求和到定义的日期
信息: -- 服务器版本:8.0.18 -- PHP版本:7.3.11
创建表:
CREATE TABLE `magacin_zalihe` (
`magacin_zalihe_id` int(11) NOT NULL,
`magacin_zalihe_magacin` varchar(8) COLLATE utf8mb4_general_ci DEFAULT NULL,
`magacin_zalihe_materijali_id` int(11) NOT NULL,
`magacin_zalihe_materijali_sifra` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`magacin_zalihe_materijali_naziv` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`magacin_zalihe_materijali_kolicina` decimal(10,2) NOT NULL,
`magacin_zalihe_materijali_tip` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`magacin_zalihe_materijali_tip2` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`magacin_zalihe_materijali_mera` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
`magacin_zalihe_materijali_pakovanje` decimal(10,2) NOT NULL,
`magacin_zalihe_materijali_paleta` decimal(10,2) NOT NULL,
`magacin_zalihe_materijali_tezina` decimal(10,2) NOT NULL,
`magacin_zalihe_materijali_opis` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`magacin_zalihe_magacioner` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`magacin_zalihe_datum` date NOT NULL,
`magacin_zalihe_narudzba` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`magacin_zalihe_vrsta` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
`magacin_zalihe_kor_modif` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
`magacin_zalihe_dat_modif` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
插入:
INSERT INTO `magacin_zalihe` (`magacin_zalihe_id`, `magacin_zalihe_magacin`, `magacin_zalihe_materijali_id`, `magacin_zalihe_materijali_sifra`, `magacin_zalihe_materijali_naziv`, `magacin_zalihe_materijali_kolicina`, `magacin_zalihe_materijali_tip`, `magacin_zalihe_materijali_tip2`, `magacin_zalihe_materijali_mera`, `magacin_zalihe_materijali_pakovanje`, `magacin_zalihe_materijali_paleta`, `magacin_zalihe_materijali_tezina`, `magacin_zalihe_materijali_opis`, `magacin_zalihe_magacioner`, `magacin_zalihe_datum`, `magacin_zalihe_narudzba`, `magacin_zalihe_vrsta`, `magacin_zalihe_kor_modif`, `magacin_zalihe_dat_modif`) VALUES
(24, '1000', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '200.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-20', '', 'utovar', 'rsolar', '2021-05-20 12:26:50'),
(25, '1000', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '250.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-20', '', 'utovar', 'rsolar', '2021-05-20 12:26:50'),
(26, '1000', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '50.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-20', '', 'utovar', 'rsolar', '2021-05-20 12:26:50'),
(27, '1000', 120, '1124314522021', 'POLIFLEX MINERAL P4,5', '-50.00', '2', '0', 'm2', '10.00', '23.00', '43.00', '', 'rsolar', '2021-05-19', '', 'istovar', 'rsolar', '2021-05-21 05:56:59'),
(28, '1000', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '-25.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-19', '', 'istovar', 'rsolar', '2021-05-21 05:56:59'),
(29, '1000', 120, '1124314522021', 'POLIFLEX MINERAL P4,5', '100.00', '2', '0', 'm2', '10.00', '23.00', '43.00', '', 'rsolar', '2021-05-21', '', 'utovar', 'rsolar', '2021-05-21 08:03:28'),
(30, '1000', 120, '1124314522021', 'POLIFLEX MINERAL P4,5', '50.00', '2', '0', 'm2', '10.00', '23.00', '43.00', '', 'rsolar', '2021-05-22', '', 'utovar', 'rsolar', '2021-05-21 08:05:10'),
(31, '1000', 120, '1124314522021', 'POLIFLEX MINERAL P4,5', '-100.00', '2', '0', 'm2', '10.00', '23.00', '43.00', '', 'dbence', '2021-05-19', '', 'istovar', 'dbence', '2021-05-21 08:25:14'),
(32, '1000', 120, '1124314522021', 'POLIFLEX MINERAL P4,5', '-80.00', '2', '0', 'm2', '10.00', '23.00', '43.00', '', 'dbence', '2021-05-21', '', 'istovar', 'dbence', '2021-05-21 08:31:13'),
(33, '1000', 52, '1122432441001', 'FIMAL A4/P', '-80.00', '2', '0', 'm2', '7.50', '20.00', '30.00', '', 'dbence', '2021-05-21', '', 'istovar', 'dbence', '2021-05-21 08:31:13'),
(34, '100', 125, '1124331321001', 'POLIFLEX PF4/S', '-100.00', '2', '0', 'm2', '10.00', '23.00', '44.00', '', 'rsolar', '2021-05-21', '', 'istovar', 'rsolar', '2021-05-21 08:57:27'),
(35, '1000', 121, '1123320261001', 'POLIFLEX P2', '-100.00', '2', '0', 'm2', '10.00', '30.00', '28.00', '', 'rsolar', '2021-05-21', '123456-2021', 'istovar', 'rsolar', '2021-05-21 12:09:24'),
(36, '1000', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '-400.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-21', '223564-2021', 'istovar', 'rsolar', '2021-05-21 12:10:11'),
(37, '126', 4, '1111152042050', 'BÁZIS FATA CSUPASZ', '100.00', '2', '0', 'm2', '20.00', '64.00', '9.00', '', 'rsolar', '2021-05-21', '', 'utovar', 'rsolar', '2021-05-21 12:51:55'),
(38, '100', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '10.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-26', '', 'utovar', 'rsolar', '2021-05-31 10:18:58'),
(39, '100', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '-100.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-31', '', 'istovar', 'rsolar', '2021-05-31 11:15:15'),
(40, '100', 24, '1110110002001', 'CARTABIT 350 1000M', '-150.00', '2', '0', 'm2', '1050.00', '1.00', '380.00', '', 'rsolar', '2021-05-31', '', 'istovar', 'rsolar', '2021-05-31 11:16:30'),
(41, '100', 131, '1111311852001', 'POLYESTER 260 P11', '10.00', '2', '0', 'm2', '13.50', '36.00', '25.90', '', 'rsolar', '2021-06-23', '', 'utovar', 'rsolar', '2021-07-05 06:12:45'),
(42, '100', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '200.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-06-23', 'INV - 2021-06-23', 'inventar', 'rsolar', '2021-07-05 06:12:45'),
(43, '100', 31, '1111141002007', 'CARTONFELTRO BITUMATO T350 2x1000M', '100.00', '2', '0', 'm2', '1050.00', '2.00', '370.00', '', 'rsolar', '2021-06-23', '', 'utovar', 'rsolar', '2021-07-05 06:12:45'),
(44, '100', 132, '1110212612001', 'POLYSTICK IR-XE 36\" IT GRANULAR', '-85.00', '2', '0', 'm2', '18.28', '20.00', '23.50', '', 'rsolar', '2021-05-31', '', 'istovar', 'rsolar', '2021-07-05 06:13:07'),
(45, '100', 29, '1111141002005', 'CARTONFELTRO BITUMATO T 300 MARCEGAGLIA', '-1.00', '2', '0', 'm2', '1020.00', '1.00', '346.00', '', 'rsolar', '2021-05-31', '', 'istovar', 'rsolar', '2021-07-05 06:13:07'),
(46, '100', 120, '1124314522021', 'POLIFLEX MINERAL P4,5', '100.00', '2', '0', 'm2', '10.00', '23.00', '43.00', '', 'rsolar', '2021-07-05', '', 'utovar', 'rsolar', '2021-07-06 07:49:55');
第一列作为主键并自动递增
需要的输出:
输出需要 200,因为最后一行是控制行并且包含 200 的库存值
我的 sql 查询:
SELECT SUM( t1.magacin_zalihe_materijali_kolicina ) AS temp,t1.* FROM magacin_zalihe AS t1 WHERE t1.magacin_zalihe_magacin='100' AND t1.magacin_zalihe_datum <= '2021-07-07' GROUP BY t1.magacin_zalihe_materijali_id
t1.magacin_zalihe_vrsta 包含 1 行,值为 'inventar',这是仓库的控制。从这个价值需要总结股票价值。如果有超过 1 行的控制,我们需要从最新的控制行求和。
我的 sql 查询尝试但不起作用:
SELECT SUM(IF( t1.magacin_zalihe_vrsta != 'inventar', t1.magacin_zalihe_materijali_kolicina, @temp := t1.magacin_zalihe_materijali_kolicina )) AS temp,t1.* FROM magacin_zalihe AS t1 WHERE t1.magacin_zalihe_magacin='100' AND t1.magacin_zalihe_datum <= '2021-07-07' GROUP BY t1.magacin_zalihe_materijali_id
谢谢,
罗伯特
【问题讨论】:
-
请提供示例数据和(创建+插入)脚本。另外,分享您正在使用的 MySQL 版本。另外,分享样本的预期输出。
-
我的信息已更新
-
你确定它应该是字符串吗? t1.magacin_zalihe_magacin='100',也许 t1.magacin_zalihe_magacin=100 ?
-
试过没有效果,问题是如何将sum设置为0并将t1.magacin_zalihe_materijali_kolicina中的值添加到并开始sum。或者从最新的控制行开始总和
-
您在执行命令时是否遇到任何错误?