创建存储过程的语法。
DELIMITER $$
USE `dbname`$$
DROP PROCEDURE IF EXISTS `procedure_nanning`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `procedure_nanning`()
BEGIN
-----
SQL1;
SQL2;
SQL3;
-----
END$$
DELIMITER ;
create procedure Cun()
begin
select * from fruit;
end
DELIMITER $$
USE `结算洗表`$$
DROP PROCEDURE IF EXISTS `nanning`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `nanning`()
BEGIN
/*
中物流股份有限公司南宁分公司
basedata_前端_成都_需要接车地
basedata_前端_南宁_合同价
62行 合同匹配
*/
UPDATE 原始表_明细_前端
SET 制票时间6 = LEFT(制票时间,6);
/*根据合同范围删除非合同到站的数据*/
UPDATE 原始表_明细_前端
SET dr非合同车站 = 1
WHERE 发站 NOT IN (SELECT 发站 FROM basedata_前端_合同范围发站);
UPDATE 原始表_明细_前端
SET dr非合同车站 = 1
WHERE 服务方式 = '站到站';
DROP TABLE IF EXISTS output_前端_5_非合同车站数据明细;
CREATE TABLE output_前端_5_非合同车站数据明细 LIKE 原始表_明细_前端;
INSERT INTO output_前端_5_非合同车站数据明细
SELECT * FROM 原始表_明细_前端
WHERE dr非合同车站 = 1;
/*是否需要起运地判断*/
/*老合同数据处理*/
TRUNCATE TABLE output_前端_1_老合同数据汇总;
INSERT INTO output_前端_1_老合同数据汇总 (制票时间,发运分公司,汽车品牌,客户名,发站,到站,服务方式,提车起运地,台数)
SELECT DISTINCT LEFT(制票时间,6),发运分公司,汽车品牌,客户名,发站,到站,服务方式,提车起运地,COUNT(*) AS 台数
FROM 原始表_明细_前端
WHERE 制票时间 < 20230601
GROUP BY LEFT(制票时间,6),发运分公司,汽车品牌,客户名,发站,到站,服务方式,提车起运地;
DROP TABLE IF EXISTS output_前端_2_老合同数据明细;
CREATE TABLE output_前端_2_老合同数据明细 LIKE 原始表_明细_前端;
INSERT INTO output_前端_2_老合同数据明细
SELECT *
FROM 原始表_明细_前端
WHERE 制票时间 < 20230601 ;
UPDATE 原始表_明细_前端
SET dr老数据 = 1
WHERE 制票时间 < 20230601;
/*匹配合同*/
UPDATE basedata_前端_南宁_合同价
SET 找合同辅助列 = CONCAT_WS(',',发运分公司,汽车品牌,客户名,发站,服务方式,提车起运地,提车终到地);
UPDATE 原始表_明细_前端
SET 找合同辅助列 = CONCAT_WS(',',发运分公司,汽车品牌,客户名,发站,服务方式,提车起运地,提车终到地);
UPDATE 原始表_明细_前端 t1 JOIN basedata_前端_南宁_合同价 t2
ON t1.找合同辅助列 = t2.找合同辅助列
SET t1.质损 = t2.质损,
t1.附加费 = t2.附加费,
t1.转运轿运 = t2.转运轿运,
t1.转运地跑 = t2.转运地跑,
t1.仓储 = t2.仓储,
t1.装车 = t2.装车,
t1.备注 = t2.备注,
t1.bfc_id = t2.bfc_id,
t1.执行结果 = '已匹配收入'
WHERE (dr老数据 IS NULL OR dr老数据 = 0)
AND (dr非合同车站 IS NULL OR dr非合同车站 = 0)
;
/*提取错误数据*/
UPDATE 原始表_明细_前端
SET 执行结果 = '厂起无提车起运地'
WHERE 服务方式 LIKE '厂%' AND 提车起运地 IS NULL
;
UPDATE 原始表_明细_前端
SET 执行结果 = '厂起无提车终到地'
WHERE 服务方式 LIKE '厂%' AND 提车终到地 IS NULL;
DROP TABLE IF EXISTS output_前端_3_数据错误明细;
CREATE TABLE output_前端_3_数据错误明细 LIKE 原始表_明细_前端;
INSERT INTO output_前端_3_数据错误明细
SELECT *
FROM 原始表_明细_前端 t1
WHERE (执行结果 ='厂起无提车起运地' OR 执行结果 = '厂起无提车终到地')
AND (备注 IS NULL OR 备注 <> '不结算')
;
/*=========================数据验证======================================*/
/*验证TMS有无订单*/
DROP TABLE IF EXISTS `中间表_前端_TMS订单`;
CREATE TABLE 中间表_前端_TMS订单 LIKE twmsall.t_order_all;
INSERT INTO 中间表_前端_TMS订单
SELECT * FROM twmsall.t_order_all
WHERE to_vehicle_vin IN (SELECT `vin码` FROM 原始表_明细_前端)
AND to_delivery_location_type = 1 AND to_start_location_type <> 1
AND 收入结算单位 = '中物流股份有限公司南宁分公司'
AND to_status <> 5;
UPDATE 原始表_明细_前端 t1 JOIN 中间表_前端_tms订单 t2
ON t1.`vin码` = t2.to_vehicle_vin
SET t1.该VIN在TMS有装车订单 = 1,
t1.`TMS合同号`=t2.to_customer_line,
t1.`to_start_address`=t2.to_start_address,
t1.`to_start_station_name`=t2.to_start_station_name,
t1.TMS订单编号 = t2.to_id ;
DROP TABLE IF EXISTS output_前端_6_TMS无装车订单;
CREATE TABLE `output_前端_6_TMS无装车订单` LIKE 原始表_明细_前端;
INSERT INTO output_前端_6_TMS无装车订单
SELECT *
FROM 原始表_明细_前端
WHERE 该VIN在TMS有装车订单 IS NULL
AND dr非合同车站 IS NULL
AND 备注 IS NULL
AND 执行结果 = '已匹配收入';
/*获取TMS系统收入数据*/
DROP TABLE IF EXISTS `中间表_前端_TMS订单收入`;
CREATE TABLE 中间表_前端_TMS订单收入 LIKE twmsall.t_income_cost;
INSERT INTO 中间表_前端_TMS订单收入
SELECT * FROM twmsall.t_income_cost
WHERE tic_order_id IN (SELECT to_id FROM 中间表_前端_TMS订单)
AND tic_settle_status = 0
;
ALTER TABLE 中间表_前端_TMS订单收入 ADD COLUMN to_vehicle_vin VARCHAR(20) AFTER tic_order_id;
UPDATE 中间表_前端_TMS订单收入 t1 JOIN 中间表_前端_tms订单 t2
ON t1.tic_order_id = t2.to_id
SET t1.to_vehicle_vin = t2.to_vehicle_vin;
/*=========================合同匹配======================================*/
UPDATE 原始表_明细_前端
SET 执行结果 = '无合同'
WHERE 执行结果 IS NULL
AND dr非合同车站 IS NULL
AND dr老数据 IS NULL;
TRUNCATE TABLE output_前端_4_缺合同;
INSERT INTO output_前端_4_缺合同(发运分公司,汽车品牌,客户名,发站,服务方式,提车起运地,提车终到地,
质损,
附加费,
转运轿运,
转运地跑,
仓储,
装车,
备注,
台数)
SELECT DISTINCT 发运分公司,汽车品牌,客户名,发站,服务方式,提车起运地,提车终到地,
质损,
附加费,
转运轿运,
转运地跑,
仓储,
装车,
备注,
COUNT(*) AS 台数
FROM 原始表_明细_前端
WHERE 执行结果 = '无合同'
GROUP BY
发运分公司,汽车品牌,客户名,发站,服务方式,提车起运地,提车终到地,
质损,
附加费,
转运轿运,
转运地跑,
仓储,
装车,
备注
;
/*========================验证TMS系统收入====================================*/
UPDATE 原始表_明细_前端 t1 JOIN
(SELECT DISTINCT to_vehicle_vin,SUM(tic_tax_cost) AS tic_tax_cost
FROM 中间表_前端_tms订单收入
WHERE 收入科目 IN ('商品汽车附加收入_保险','商品汽车附加收入_质损')
GROUP BY to_vehicle_vin) t2
ON t1.`vin码` = t2.to_vehicle_vin
SET t1.质损合并 = t2.tic_tax_cost;
UPDATE 原始表_明细_前端 t1 JOIN
(SELECT DISTINCT to_vehicle_vin,SUM(tic_tax_cost) AS tic_tax_cost
FROM 中间表_前端_tms订单收入
WHERE 收入科目 IN ('商品汽车附加收入_提车','商品汽车附加收入_专用线','铁转公_商品汽车附加收入_提车')
GROUP BY to_vehicle_vin) t2
ON t1.`vin码` = t2.to_vehicle_vin
SET t1.附加费合并 = t2.tic_tax_cost;
UPDATE 原始表_明细_前端 t1 JOIN
(SELECT DISTINCT to_vehicle_vin,SUM(tic_tax_cost) AS tic_tax_cost
FROM 中间表_前端_tms订单收入
WHERE 收入科目 IN ('补助收入','返厂收入','转运轿运收入','铁转公_转运收入')
GROUP BY to_vehicle_vin) t2
ON t1.`vin码` = t2.to_vehicle_vin
SET t1.转运轿运合并 = t2.tic_tax_cost;
UPDATE 原始表_明细_前端 t1 JOIN
(SELECT DISTINCT to_vehicle_vin,SUM(tic_tax_cost) AS tic_tax_cost
FROM 中间表_前端_tms订单收入
WHERE 收入科目 IN ('转运地跑收入')
GROUP BY to_vehicle_vin) t2
ON t1.`vin码` = t2.to_vehicle_vin
SET t1.转运地跑合并 = t2.tic_tax_cost;
UPDATE 原始表_明细_前端 t1 JOIN
(SELECT DISTINCT to_vehicle_vin,SUM(tic_tax_cost) AS tic_tax_cost
FROM 中间表_前端_tms订单收入
WHERE 收入科目 IN ('铁转公_商品汽车附加收入_发运仓储','商品汽车附加收入_发运仓储')
GROUP BY to_vehicle_vin) t2
ON t1.`vin码` = t2.to_vehicle_vin
SET t1.仓储合并 = t2.tic_tax_cost;
UPDATE 原始表_明细_前端 t1 JOIN
(SELECT DISTINCT to_vehicle_vin,SUM(tic_tax_cost) AS tic_tax_cost
FROM 中间表_前端_tms订单收入
WHERE 收入科目 IN ('加固收入','装车收入')
GROUP BY to_vehicle_vin) t2
ON t1.`vin码` = t2.to_vehicle_vin
SET t1.装车合并 = t2.tic_tax_cost;
UPDATE 原始表_明细_前端
SET 质损合并不一致 = 0
;
UPDATE 原始表_明细_前端
SET 装车合并不一致 = 0
;
UPDATE 原始表_明细_前端
SET 附加费合并不一致 = 0
;
UPDATE 原始表_明细_前端
SET 转运轿运合并不一致 = 0
;
UPDATE 原始表_明细_前端
SET 转运地跑合并不一致 = 0
;
UPDATE 原始表_明细_前端
SET 仓储合并不一致 = 0
;
UPDATE 原始表_明细_前端
SET TMS收入不一致 = 0;
UPDATE 原始表_明细_前端
SET 质损合并不一致 = 1
WHERE IFNULL(质损,0) <> IFNULL(质损合并,0);
UPDATE 原始表_明细_前端
SET 装车合并不一致 = 1
WHERE IFNULL(装车,0) <> IFNULL(装车合并,0);
UPDATE 原始表_明细_前端
SET 附加费合并不一致 = 1
WHERE IFNULL(附加费,0) <> IFNULL(附加费合并,0);
UPDATE 原始表_明细_前端
SET 转运轿运合并不一致 = 1
WHERE IFNULL(转运轿运,0) <> IFNULL(转运轿运合并,0);
UPDATE 原始表_明细_前端
SET 转运地跑合并不一致 = 1
WHERE IFNULL(转运地跑,0) <> IFNULL(转运地跑合并,0);
UPDATE 原始表_明细_前端
SET 仓储合并不一致 = 1
WHERE IFNULL(仓储,0) <> IFNULL(仓储合并,0);
UPDATE 原始表_明细_前端
SET TMS收入不一致 = 1
WHERE
质损合并不一致 =1 OR
附加费合并不一致 =1 OR
转运轿运合并不一致 =1 OR
转运地跑合并不一致 =1 OR
仓储合并不一致 =1 OR
装车合并不一致;
DROP TABLE IF EXISTS output_前端_7_收入可能有问题;
CREATE TABLE output_前端_7_收入可能有问题 LIKE 原始表_明细_前端;
INSERT INTO output_前端_7_收入可能有问题
SELECT * FROM 原始表_明细_前端
WHERE TMS收入不一致 = 1
AND 执行结果= '已匹配收入'
AND 备注 IS NULL;
/*=============================生成对账表================================*/
UPDATE 原始表_明细_前端
SET 对账表使用本条 = 1
WHERE 执行结果 = '已匹配收入' AND 备注 IS NULL AND (TMS收入不一致 IS NULL OR TMS收入不一致=0);
TRUNCATE TABLE output_前端_8_对账表;
INSERT INTO output_前端_8_对账表 (发运分公司,客户名,汽车品牌,制票时间,VIN码导出状态,发站,到站,提车起运地,台数,
装车,
仓储,
转运轿运,
转运地跑,
附加费,
质损,
执行结果,
备注)
SELECT DISTINCT 发运分公司,客户名,汽车品牌,制票时间,VIN码导出状态,发站,到站,提车起运地,COUNT(*) AS 台数,
装车,
仓储,
转运轿运,
转运地跑,
附加费,
质损,
执行结果,
备注
FROM 原始表_明细_前端
WHERE 对账表使用本条 = 1
GROUP BY 发运分公司,客户名,汽车品牌,制票时间,VIN码导出状态,发站,到站,提车起运地,
装车,
仓储,
转运轿运,
转运地跑,
附加费,
质损,
执行结果,
备注 ;
UPDATE output_前端_8_对账表
SET 合计=
(
IFNULL(质损,0)+
IFNULL(附加费,0)+
IFNULL(转运轿运,0)+
IFNULL(转运地跑,0)+
IFNULL(仓储,0)+
IFNULL(装车,0)
)*台数;
/*对账表改时间格式*/
UPDATE output_前端_8_对账表
SET 制票时间 = CONCAT_WS('',LEFT(制票时间,4),'年', SUBSTRING(制票时间, 5, 2) ,'月');
UPDATE output_前端_8_对账表
SET 制票时间=REPLACE(制票时间, '10', '13');
UPDATE output_前端_8_对账表
SET 制票时间=REPLACE(制票时间, '0', '');
UPDATE output_前端_8_对账表
SET 制票时间=REPLACE(制票时间, '22', '202');
UPDATE output_前端_8_对账表
SET 制票时间=REPLACE(制票时间, '13', '10');
UPDATE output_前端_8_对账表
SET VIN码导出状态 = CONCAT_WS('',LEFT(VIN码导出状态,4),'年', SUBSTRING(VIN码导出状态, 6, 2) ,'月');
UPDATE output_前端_8_对账表
SET VIN码导出状态=REPLACE(VIN码导出状态, '10', '13');
UPDATE output_前端_8_对账表
SET VIN码导出状态=REPLACE(VIN码导出状态, '0', '');
UPDATE output_前端_8_对账表
SET VIN码导出状态=REPLACE(VIN码导出状态, '22', '202');
UPDATE output_前端_8_对账表
SET VIN码导出状态=REPLACE(VIN码导出状态, '13', '10');
/*简单报表*/
SELECT '一共导入了',(SELECT COUNT(*) FROM 原始表_明细_前端),
'非合同车站数据',(SELECT COUNT(*) FROM 原始表_明细_前端 WHERE dr非合同车站 = 1 ),
'其中老合同数据',(SELECT COUNT(*) FROM output_前端_2_老合同数据明细 ),
'数据错误',(SELECT COUNT(*) FROM output_前端_3_数据错误明细 ),
'已匹配收入',(SELECT SUM(台数) FROM output_前端_8_对账表 ),
'无合同数据',(SELECT SUM(台数) FROM output_前端_4_缺合同 ),
'不结算数据',(SELECT COUNT(*) FROM 原始表_明细_前端 WHERE 备注='不结算')
;
END$$
DELIMITER ;