业务需求
需求描述

[步骤]

消耗CPU 最多 


DECLARE @CustomerID int

                            declare @Start int,@Limit int,@Total int

                            set @Start=1

                            set @Limit=10000

                            set @CustomerID=1 

IF OBJECT_ID('Tempdb..#tempSkuRange') IS NOT NULL

                        DROP TABLE #tempSkuRange;

                        IF OBJECT_ID('Tempdb..#temp_Procurement') IS NOT NULL

                        DROP TABLE #temp_Procurement;

                        IF OBJECT_ID('Tempdb..#tempActiveInfo') IS NOT NULL

                        DROP TABLE #tempActiveInfo;

                        IF OBJECT_ID('Tempdb..#tempSkuRangeOrder') IS NOT NULL

                        DROP TABLE #tempSkuRangeOrder;

create table #tempSkuRange(SKU varchar(50) COLLATE Chinese_PRC_CI_AS) 

                        create table #tempSkuRangeOrder(SKU varchar(50) COLLATE Chinese_PRC_CI_AS,Num int) 

                        create table #temp_Procurement(P_Code varchar(50) COLLATE Chinese_PRC_CI_AS,SKU varchar(30) COLLATE Chinese_PRC_CI_AS,SingleNum int,ActualBuyNum int,ProductNum int,PutNum int,ProcNum INT,WarehouseID INT)  

                        create table #tempActiveInfo(SKU varchar(50) COLLATE Chinese_PRC_CI_AS,PutTime datetime,ShipTime datetime,ActiveTime DATETIME,WarehouseID INT)

0 and CustomerID=@CustomerID AND WareHouseID IN(SELECT id FROM dbo.RB_WareHouse (nolock) WHERE WareHouseType=1)

                            insert into #tempSkuRangeOrder(Num,SKU) SELECT ROW_NUMBER() OVER(order by SKU) AS Num,SKU from #tempSkuRange (nolock)

select @Total=COUNT(*) from #tempSkuRange

                            while @Start

                            BEGIN

                            insert into #temp_Procurement(SKU,P_Code,SingleNum,ActualBuyNum,ProductNum,PutNum,ProcNum,WarehouseID)

                                                                    select SKU,P_Code,SingleNum,ActualBuyNum,ProductNum,PutNum,ProcNum,d.WareHouseID from (select  a.SKU,a.P_Code,a.SingleNum,a.ActualBuyNum,a.ProductNum,a.PutNum,(SELECT MAX(ProcNum)

                                                                    FROM ( VALUES ( SingleNum), ( ActualBuyNum),(ProductNum) ) AS ProcNum (ProcNum)) AS ProcNum,c.WareHouseID from RB_Procurement_Detail a (nolock)

                                                                    inner join RB_Procurement_List c (nolock) on a.CustomerID=c.CustomerID and a.P_Code=c.P_Code

=@Start and Num<>1

                                                                    union all

                                                                    select  a.SKU,a.P_Code,0 SingleNum,0 ActualBuyNum,0 ProductNum,0 PutNum,0 ProcNum,c.WareHouseID from RB_Procurement_Detail a (nolock)

                                                                    inner join RB_Procurement_List c (nolock) on a.CustomerID=c.CustomerID and a.P_Code=c.P_Code

=@Start and Num

                            set @Start=@Start+@Limit-1

                            END

   insert into #tempActiveInfo(SKU,PutTime,ShipTime,ActiveTime,WarehouseID)

                                                                    select isnull(p.SKU,q.SKU) SKU,p.PutTime,q.ShipTime,(SELECT MAX(ActiveTime)

                                                                    FROM (VALUES (PutTime), (ShipTime)) AS ActiveTime (ActiveTime)) AS ActiveTime,ISNULL(p.WareHouseID,q.WareHouseID) WareHouseID from 

                                                                    (select a.SKU,b.WareHouseID,MAX(a.AddTime) as PutTime from RB_Procurement_Detail_PutList a (nolock) INNER JOIN RB_Procurement_List b (NOLOCK) ON a.CustomerID=b.CustomerID AND a.P_Code=b.P_Code

                                                                    where IsDeleted=0 and a.CustomerID=@CustomerID group by a.SKU,b.WareHouseID) p

                                                                    full outer join

                                                                    (select b.SKU,a.WareHouseID,MAX(a.ShipTime) ShipTime from RB_Procurement_Order_Package a (nolock) inner join RB_Procurement_Order_Package_Detail b (nolock) on a.ID=b.PackageID 

                                                                    where a.CustomerID=@CustomerID and a.PackageState=3 group by a.WareHouseID,b.SKU) q on p.SKU=q.SKU AND p.WareHouseID=q.WareHouseID

 select p.SKU,p.WarehouseID,ISNULL(p.PutNum,0) PutNum,isnull(p.ProcessingNum,0) ProcessingNum,isnull(p.TotalProcNum,0) TotalProcNum,p.ActiveTime,p.PutTime,p.ShipTime from (

                                                        select isnull(t1.SKU,t2.SKU) SKU,ISNULL(t1.WarehouseID,t2.WarehouseID) WarehouseID,t1.PutNum,t1.ProcessingNum,t1.TotalProcNum,t2.ShipTime,t2.ActiveTime,t2.PutTime from 

                                                        (select SKU,WarehouseID,SUM(PutNum) PutNum,sum(ProcNum) TotalProcNum,(sum(ProcNum)-sum(PutNum)) ProcessingNum from #temp_Procurement group by WarehouseID,SKU) t1

                                                        full outer join #tempActiveInfo t2 on t1.SKU=t2.SKU AND t1.WarehouseID=t2.WarehouseID) p inner join #tempSkuRange q on p.SKU=q.SKU

DELETE a from RB_Warehouse_Product_ActiveInfo a where a.CustomerID=@CustomerID and not exists(select SKU from #tempActiveInfo b where a.SKU=b.SKU AND a.WarehouseID=b.WarehouseID)

IF OBJECT_ID('Tempdb..#tempSkuRange') IS NOT NULL

                            DROP TABLE #tempSkuRange;

                            IF OBJECT_ID('Tempdb..#temp_Procurement') IS NOT NULL

                            DROP TABLE #temp_Procurement;

                            IF OBJECT_ID('Tempdb..#tempActiveInfo') IS NOT NULL

                            DROP TABLE #tempActiveInfo;

                            IF OBJECT_ID('Tempdb..#tempSkuRangeOrder') IS NOT NULL

                            DROP TABLE #tempSkuRangeOrder;


[结果]


[期望]

优化SQL减少开销损耗
验收标准
价值描述
1
历史记录  
  1. 2024-09-27 19:10:49, 由 赵喜 Bug转化而来,Bug编号为 52116 。
  2. 2024-10-31 18:22:32, 由 周杰 编辑。
    修改了 上线时间,旧值为 "2024-10-10",新值为 "0000-00-00"。
  3. 2024-11-20 09:42:43, 由 赵喜 编辑。
    修改了 所属计划 ,旧值为 "",新值为 "1596"。
    修改了 每月价值量,旧值为 "11111",新值为 "3000"。
    修改了 价值类型 ,旧值为 "1",新值为 "2"。
    修改了 ROI ,旧值为 "22.22",新值为 "6.00"。
    修改了 所处阶段 ,旧值为 "wait",新值为 "planned"。
  4. 2024-11-20 17:23:21, 由 杨林军 记录评审结果,结果为 确认通过。
  5. 2024-11-28 16:46:55, 由 周杰 编辑。
    修改了 所属计划,旧值为 "1596",新值为 "1598"。
  6. 2024-12-05 13:57:06, 由 周杰 编辑。
    修改了 所属计划,旧值为 "1598",新值为 "1314"。
  7. 2025-01-08 10:13:29, 由 周杰 编辑。
    修改了 所属计划,旧值为 "1314",新值为 "1732"。
    修改了 ROI ,旧值为 "6.00",新值为 "1"。
  8. 2025-01-09 09:08:51, 由 周杰 编辑。
    修改了 所属计划,旧值为 "1732",新值为 "1314"。
  9. 2025-02-08 11:32:08, 由 周杰 关联到计划 Sprint_WMS_20250225。
  10. 2025-02-08 18:55:59, 由 程伟 编辑。
    修改了 所处阶段 ,旧值为 "planned",新值为 "closed"。
    修改了 设置阶段者,旧值为 "",新值为 "chengwei"。
    连续4个多月无人反馈这个功能问题,暂时不做
  11. 2025-02-08 18:57:46, 由 周杰 编辑。
    修改了 所属计划,旧值为 "1717",新值为 ""。
  12. 2025-02-08 18:57:57, 由 周杰 关闭,原因为 不做 。
    修改了 关闭原因,旧值为 "",新值为 "willnotdo"。
    修改了 当前状态,旧值为 "active",新值为 "closed"。
    修改了 指派给 ,旧值为 "lihuiyun",新值为 "closed"。
    修改了 关闭日期,旧值为 "0000-00-00 00:00:00",新值为 "2025-02-08 18:57:57"。
    修改了 由谁关闭,旧值为 "",新值为 "zhoujie"。
    已无此问题,无需优化
迭代版本
提报业务部门 技术研发中心
提报人员 程伟
需求来源 系统性能优化
所属项目 技术中心-需求池
所属模块 供应链   仓储物流
所属计划
业务价值
开发组 仓储物流开发组
受益业务部门 技术研发中心
验收人员 杨林军
业务目标类型 其他
中心业务目标 其他
业务价值 降低成本
每月价值量 3000
每月节省人数 0
优先级 P3
价值类型 短期价值
预计工时 6
成本 3000
ROI 1.00
操作手册 是
高价值 -
主被动 被动接收
复杂度 一般性
工作流ID
工作流创建时间 0000-00-00 00:00:00
更新点 常规更新
是否高危 否
评分
当前状态 已关闭
所处阶段 已关闭
关键词
评审次数 一次
计划上线
上线时间 0000-00-00
计划验收时间 0000-00-00
业务验收时间
满意度
价值验收
满意度分值
业务回填价值
验收达成价值
验收达成ROI
抄送给 袁慧斌  
由谁创建 赵喜 于 2024-09-27 19:10:49
指派给 Closed 于 2025-02-08 18:57:57
由谁评审 杨林军
评审时间 2024-11-20
由谁关闭 周杰 于 2025-02-08 18:57:57
关闭原因 不做
最后修改 周杰 于 2025-02-08 18:57:57