前景提要
HDC调试需求开发(15万预算),能者速来!>>>
下面是我写的mysql存储过程,之前使用程序写速度有点慢,现在改写但遇到点问题,希望帮忙给啊,感谢指点
BEGIN /** 进退货统计表 参数:(都是字符串) 时间 如:2013-01-01 分部 如:1,2,3,4 供应商 如:2,3'4,2 商品编码或名称 如:SF22202 */ DECLARE ItemNO VARCHAR(50); DECLARE startDa VARCHAR(15); DECLARE endDa VARCHAR(15); -- 不存在则创建临时表 CREATE TEMPORARY TABLE if not exists reportAdvanceReurn ( branchId VARCHAR(50) NOT NULL,-- 订货分部id supplierId VARCHAR(50) NOT NULL,-- 供应商id itemNo VARCHAR(20) NOT NULL, -- 商品编码 itemName VARCHAR(50) NULL,-- 商品名称 AdvanceAmount DECIMAL(18,4) NULL, -- 进货量 AdvancePrice DECIMAL(18,4) NULL, -- 进货单价 ReturnAmount DECIMAL(18,4) NULL, -- 退货量 ReturnPrice DECIMAL(18,4) NULL, -- 退货单价 unitName VARCHAR(10) null,-- 单位名称 total DECIMAL(18,4) null, -- 小计 UNIQUE KEY (branchId,supplierId,itemNo) ); -- 临时存储数量表 不存在则创建临时表 CREATE TEMPORARY TABLE if not exists reportAdvanceReurnAmount ( branchId VARCHAR(50) NOT NULL,-- 订货分部id supplierId VARCHAR(50) NOT NULL,-- 供应商id itemNo VARCHAR(20) NOT NULL, -- 商品编码 amount DECIMAL(18,4) NULL -- 量 ); TRUNCATE TABLE reportAdvanceReurn; -- 使用前先清空临时表 -- 设置模糊查询的值 IF(itemNo IS NOT NULL ) THEN SET ItemNO ='%'+p_itemNo+ '%'; end if; -- 进货信息 SELECT branch.`NAME` AS '订货分部',supplier.SUPPLY_NAME AS '供应商名称', item.ITEM_NO AS '商品编码', item.ITEM_NAME AS '商品名称',bdun.`NAME` AS '单位',SUM(qcyitem.PRICE)/SUM(qcyitem.AMOUNT) AS '单价',SUM(qcyitem.AMOUNT) '验收量', (SUM(qcyitem.PRICE)/SUM(qcyitem.AMOUNT))*SUM(qcyitem.AMOUNT) AS '小计' FROM qcy_purchase_info_item AS item LEFT JOIN qcy_purchase_info AS qinfo ON item.HEADER_ID = qinfo.ID LEFT JOIN bd_supplier AS supplier ON supplier.ID = qinfo.SUPPLIER_ID LEFT JOIN bd_branch AS branch ON branch.ID = item.REQUEST_BRANCH_ID LEFT JOIN sys_user AS su ON su.ID = qinfo.MODIFIER LEFT JOIN bd_unit AS bdun ON bdun.ID = item.UNIT LEFT JOIN qcy_acceptence_info AS qcyinfo ON qcyinfo.SOURCES_NO=qinfo.`NO` LEFT JOIN qcy_acceptence_info_item AS qcyitem ON qcyitem.HEADER_ID=qcyinfo.ID AND qcyitem.ITEM_NO=item.ITEM_NO where item.AMOUNT>0 AND qinfo.PURCHASE_DATE >= startDate AND qinfo.PURCHASE_DATE <= endDate AND qcyinfo.REQUEST_BRANCH_ID IN (branchIdList) AND qcyinfo.SUPPLY_UNITS_ID in(supplierList) AND item.ITEM_NO LIKE ItemNO OR item.ITEM_NAME LIKE ItemNO GROUP BY branch.ID,supplier.ID ,item.ITEM_NO ORDER BY branch.ID,supplier.ID,item.ITEM_NO; TRUNCATE TABLE reportAdvanceReurnAmount; -- 使用前先清空临时表 END 其中下面这部分是根据参数是否存在才加的限制条件,这里如果不传参数是不是会有问题啊??如果有问题应该如何做啊??知道的希望指点一下啊
where item.AMOUNT>0 AND qinfo.PURCHASE_DATE >= startDate AND qinfo.PURCHASE_DATE <= endDate AND qcyinfo.REQUEST_BRANCH_ID IN (branchIdList) AND qcyinfo.SUPPLY_UNITS_ID in(supplierList) AND item.ITEM_NO LIKE ItemNO OR item.ITEM_NAME LIKE ItemNO