0
点赞
收藏
分享

微信扫一扫

创建存储过程的语法

颜路在路上 2023-11-16 阅读 44


创建存储过程的语法。

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 ;

举报

相关推荐

0 条评论