DECLARE @Select varchar(8000)
-- 货位入库信息
SELECT @Select = 'SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##storInTemp
FROM
V_InStorehouseInfo
WHERE VGoodsLocationC
IN (SELECT VGoodsLocationC FROM V_InStorehouseInfo '
+ @Condition + ')
or VGoodsLocationC in (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + ')
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade' EXEC (@Select)
-- 移库移入数 T_StorMoveSub
SET @Select = '
SELECT
VGoodsLocationC_In,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##TempMoveInSub
FROM
V_StorMoveInfo
WHERE
V_CommitFlag = ''已经提交''
AND (VGoodsLocationC_In
IN (SELECT VGoodsLocationC FROM ##storInTemp )
OR VGoodsLocationC_In
IN (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + '))
GROUP BY
VGoodsLocationC_In, VTranCode,V_ProducingArea,V_OldGBGrade,V_GBGrade'
EXEC (@Select) -- 加上移库移入数
SET @Select = '
INSERT INTO
##storInTemp (
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC_In,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
FROM
##TempMoveInSub'
EXEC(@Select) -- 获取货位冲账信息
SELECT
VGoodsLocationC,
V_TranCode,
V_ProducingArea,
V_GBGradeOld,
V_GBGrade,
I_PackageCountBalance,
N_WeightBalance
INTO
#TempLocationStrikeBalance
FROM
V_StorStrikeBalanceInfo
WHERE
VGoodsLocationC
IN (SELECT VGoodsLocationC FROM ##storInTemp)
-- 插入冲账数据进行计算
INSERT INTO
##storInTemp (
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC,
V_TranCode,
V_ProducingArea,
V_GBGradeOld,
V_GBGrade,
I_PackageCountBalance,
N_WeightBalance
FROM
#TempLocationStrikeBalance
-- 入库 + 移库移入 + 冲账
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempLocationIn
FROM
##storInTemp
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade
-- 货位出库信息
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##storOutTemp
FROM
V_OutStorehouseInfo
WHERE
VGoodsLocationC IN (SELECT VGoodsLocationC FROM ##storInTemp)
GROUP BY
VGoodsLocationC,Vtrancode, VGoodsLocation, V_OldGBGrade,V_GBGrade -- 移库移出数
SELECT
VGoodsLocationC_Out,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempMoveOutSub
FROM
V_StorMoveInfo
WHERE
VGoodsLocationC_Out
IN (SELECT VGoodsLocationC FROM ##storInTemp)
AND V_CommitFlag = '已经提交'
GROUP BY
VGoodsLocationC_Out,Vtrancode,V_ProducingArea,V_OldGBGrade,V_GBGrade
-- 加上移库移出数--
INSERT INTO
##storOutTemp (
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC_Out,
Vtrancode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
FROM
#TempMoveOutSub
-- 出库 + 移库移出
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempLocationOut
FROM
##storOutTemp
GROUP BY
VGoodsLocationC,Vtrancode,VGoodsLocation,V_OldGBGrade,V_GBGrade UPDATE
#TempLocationIn
SET
#TempLocationIn.IPackageCount = #TempLocationIn.IPackageCount - #TempLocationOut.IPackageCount,
#TempLocationIn.NWeight = #TempLocationIn.NWeight - #TempLocationOut.NWeight
FROM
#TempLocationOut
WHERE
#TempLocationOut.[VGoodsLocationC] = #TempLocationIn.[VGoodsLocationC] AND
#TempLocationOut.[Vtrancode] = #TempLocationIn.[Vtrancode] AND
#TempLocationOut.[VGoodsLocation] = #TempLocationIn.[VStartPoint] AND
#TempLocationOut.[V_OldGBGrade] = #TempLocationIn.[V_OldGBGrade] AND
#TempLocationOut.[V_GBGrade] = #TempLocationIn.[V_GBGrade]
---------------------------------------------------------------------------------------------------
DELETE FROM #TempLocationIn WHERE IPackageCount = 0 AND NWeight = 0
-- 获取发货地 年度 收购类型 入库日期 运单号 司磅员
SELECT
A.*,
B.DTobaccoDate,
B.VSBY,
B.VReserveType,
B.DInDate
INTO
##LocationsMoveStorage
FROM
#TempLocationIn A
LEFT JOIN
T_StorRealIn B
ON
A.Vtrancode = B.Vtrancode
ORDER BY A.VGoodsLocationC SELECT @Select = '
SELECT
identity(int,1,1) AS OrderID,
VGoodsLocationC,
V_GBGrade,
VStartPoint,
CONVERT(CHAR(4),DTobaccoDate,112) AS DTobaccoDate,
VReserveType,
VSBY,
DInDate,
VTranCode,
V_OldGBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##LocationsStorageReturnOrder
FROM
##LocationsMoveStorage'
+ @FinllyCondition +'
GROUP BY
VGoodsLocationC,V_GBGrade,VStartPoint,DTobaccoDate,VReserveType,VSBY,DInDate,VTranCode,V_OldGBGrade'
EXEC (@Select) -- select * from ##LocationsStorageReturnOrder -- 最终初烟货位库存结果集
-- 货位入库信息
SELECT @Select = 'SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##storInTemp
FROM
V_InStorehouseInfo
WHERE VGoodsLocationC
IN (SELECT VGoodsLocationC FROM V_InStorehouseInfo '
+ @Condition + ')
or VGoodsLocationC in (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + ')
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade' EXEC (@Select)
-- 移库移入数 T_StorMoveSub
SET @Select = '
SELECT
VGoodsLocationC_In,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##TempMoveInSub
FROM
V_StorMoveInfo
WHERE
V_CommitFlag = ''已经提交''
AND (VGoodsLocationC_In
IN (SELECT VGoodsLocationC FROM ##storInTemp )
OR VGoodsLocationC_In
IN (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + '))
GROUP BY
VGoodsLocationC_In, VTranCode,V_ProducingArea,V_OldGBGrade,V_GBGrade'
EXEC (@Select) -- 加上移库移入数
SET @Select = '
INSERT INTO
##storInTemp (
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC_In,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
FROM
##TempMoveInSub'
EXEC(@Select) -- 获取货位冲账信息
SELECT
VGoodsLocationC,
V_TranCode,
V_ProducingArea,
V_GBGradeOld,
V_GBGrade,
I_PackageCountBalance,
N_WeightBalance
INTO
#TempLocationStrikeBalance
FROM
V_StorStrikeBalanceInfo
WHERE
VGoodsLocationC
IN (SELECT VGoodsLocationC FROM ##storInTemp)
-- 插入冲账数据进行计算
INSERT INTO
##storInTemp (
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC,
V_TranCode,
V_ProducingArea,
V_GBGradeOld,
V_GBGrade,
I_PackageCountBalance,
N_WeightBalance
FROM
#TempLocationStrikeBalance
-- 入库 + 移库移入 + 冲账
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempLocationIn
FROM
##storInTemp
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade
-- 货位出库信息
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##storOutTemp
FROM
V_OutStorehouseInfo
WHERE
VGoodsLocationC IN (SELECT VGoodsLocationC FROM ##storInTemp)
GROUP BY
VGoodsLocationC,Vtrancode, VGoodsLocation, V_OldGBGrade,V_GBGrade -- 移库移出数
SELECT
VGoodsLocationC_Out,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempMoveOutSub
FROM
V_StorMoveInfo
WHERE
VGoodsLocationC_Out
IN (SELECT VGoodsLocationC FROM ##storInTemp)
AND V_CommitFlag = '已经提交'
GROUP BY
VGoodsLocationC_Out,Vtrancode,V_ProducingArea,V_OldGBGrade,V_GBGrade
-- 加上移库移出数--
INSERT INTO
##storOutTemp (
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC_Out,
Vtrancode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
FROM
#TempMoveOutSub
-- 出库 + 移库移出
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempLocationOut
FROM
##storOutTemp
GROUP BY
VGoodsLocationC,Vtrancode,VGoodsLocation,V_OldGBGrade,V_GBGrade UPDATE
#TempLocationIn
SET
#TempLocationIn.IPackageCount = #TempLocationIn.IPackageCount - #TempLocationOut.IPackageCount,
#TempLocationIn.NWeight = #TempLocationIn.NWeight - #TempLocationOut.NWeight
FROM
#TempLocationOut
WHERE
#TempLocationOut.[VGoodsLocationC] = #TempLocationIn.[VGoodsLocationC] AND
#TempLocationOut.[Vtrancode] = #TempLocationIn.[Vtrancode] AND
#TempLocationOut.[VGoodsLocation] = #TempLocationIn.[VStartPoint] AND
#TempLocationOut.[V_OldGBGrade] = #TempLocationIn.[V_OldGBGrade] AND
#TempLocationOut.[V_GBGrade] = #TempLocationIn.[V_GBGrade]
---------------------------------------------------------------------------------------------------
DELETE FROM #TempLocationIn WHERE IPackageCount = 0 AND NWeight = 0
-- 获取发货地 年度 收购类型 入库日期 运单号 司磅员
SELECT
A.*,
B.DTobaccoDate,
B.VSBY,
B.VReserveType,
B.DInDate
INTO
##LocationsMoveStorage
FROM
#TempLocationIn A
LEFT JOIN
T_StorRealIn B
ON
A.Vtrancode = B.Vtrancode
ORDER BY A.VGoodsLocationC SELECT @Select = '
SELECT
identity(int,1,1) AS OrderID,
VGoodsLocationC,
V_GBGrade,
VStartPoint,
CONVERT(CHAR(4),DTobaccoDate,112) AS DTobaccoDate,
VReserveType,
VSBY,
DInDate,
VTranCode,
V_OldGBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##LocationsStorageReturnOrder
FROM
##LocationsMoveStorage'
+ @FinllyCondition +'
GROUP BY
VGoodsLocationC,V_GBGrade,VStartPoint,DTobaccoDate,VReserveType,VSBY,DInDate,VTranCode,V_OldGBGrade'
EXEC (@Select) -- select * from ##LocationsStorageReturnOrder -- 最终初烟货位库存结果集
解决方案 »
- 紧急求助:SQL Server 2000安装出现问题
- 安装SQL Sever 2005的人请进
- 请教关于索引:是否非聚集索引的顺序会覆盖聚集索引的顺序?
- left join联合查询
- VF转换成sql 2005
- 使用SQL Server 2000 + ASP 出现诡异的问题,SOOOOOOOOS
- sql200删除字段里的部分数据问题
- 求助!为什么我这条查询老是只返回1月份和10-12月份的数据,而2,3,4等月份的却查不到?select Month(日期) as 月, Max(修河水位表.水位
- 重新开一个帖子,探讨一个比较有难度的分类统计问题,分不多,也要奖励!
- 哪位帮忙优化优化下面的代码!!!
- 求一SQL 语句,关于INNER JOIN的条件,最后10分了,有了分再送200!!!一定!!!
- 帮忙看看吧,,在线等呢
都一个星了,也不帮忙看一下
如果邹、子陌他们经过就算了
select count(*) from V_StorMoveInfo
select count(*) from V_StorStrikeBalanceInfo
select count(*) from T_StorRealIn33375、1006、22、11235
多谢你了
DECLARE @Select varchar(8000)
-- 货位入库信息
SELECT @Select = '
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##storInTemp
FROM (
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight FROM V_InStorehouseInfo '
+ @Condition + 'UNION ALL
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight FROM V_InStorehouseInfo
WHERE VGoodsLocationC in (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + ')
) A
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade'
--此处优化代码没减少,但是性能可以提升不少
--原因V_InStorehouseInfo有30000多条数据如果有IN(子查询30000多条)的话会增加原基础上30%(我执行计划得到)开销
EXEC (@Select)
-- 移库移入数 T_StorMoveSub
-- 加上移库移入数
SET @Select = '
INSERT INTO ##storInTemp
SELECT
VGoodsLocationC_In,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
V_StorMoveInfo
WHERE
V_CommitFlag = ''已经提交''
AND (VGoodsLocationC_In
IN (SELECT VGoodsLocationC FROM ##storInTemp )
OR VGoodsLocationC_In
IN (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + '))
GROUP BY
VGoodsLocationC_In, VTranCode,V_ProducingArea,V_OldGBGrade,V_GBGrade'
EXEC (@Select)
-- 获取货位冲账信息
-- 插入冲账数据进行计算
INSERT INTO ##storInTemp
(
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC,
V_TranCode,
V_ProducingArea,
V_GBGradeOld,
V_GBGrade,
I_PackageCountBalance,
N_WeightBalance FROM
V_StorStrikeBalanceInfo
WHERE
VGoodsLocationC
IN (SELECT VGoodsLocationC FROM ##storInTemp)
-- 入库 + 移库移入 + 冲账
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempLocationIn
FROM
##storInTemp
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade
-- 货位出库信息
-- 出库 + 移库移出
UPDATE
#TempLocationIn
SET
#TempLocationIn.IPackageCount = #TempLocationIn.IPackageCount - TempLocationOut.IPackageCount,
#TempLocationIn.NWeight = #TempLocationIn.NWeight - TempLocationOut.NWeight
FROM (
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
( SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
V_OutStorehouseInfo
WHERE
VGoodsLocationC IN (SELECT VGoodsLocationC FROM ##storInTemp)
GROUP BY
VGoodsLocationC,Vtrancode, VGoodsLocation, V_OldGBGrade,V_GBGrade
UNION ALL
SELECT
VGoodsLocationC_Out,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
V_StorMoveInfo
WHERE
VGoodsLocationC_Out
IN (SELECT VGoodsLocationC FROM ##storInTemp)
AND V_CommitFlag = '已经提交'
GROUP BY
VGoodsLocationC_Out,Vtrancode,V_ProducingArea,V_OldGBGrade,V_GBGrade) AS storOutTemp
GROUP BY
VGoodsLocationC,Vtrancode,VGoodsLocation,V_OldGBGrade,V_GBGrade) AS TempLocationOut
WHERE
TempLocationOut.[VGoodsLocationC] = #TempLocationIn.[VGoodsLocationC] AND
TempLocationOut.[Vtrancode] = #TempLocationIn.[Vtrancode] AND
TempLocationOut.[VGoodsLocation] = #TempLocationIn.[VStartPoint] AND
TempLocationOut.[V_OldGBGrade] = #TempLocationIn.[V_OldGBGrade] AND
TempLocationOut.[V_GBGrade] = #TempLocationIn.[V_GBGrade]
---------------------------------------------------------------------------------------------------
DELETE FROM #TempLocationIn WHERE IPackageCount = 0 AND NWeight = 0
-- 获取发货地 年度 收购类型 入库日期 运单号 司磅员
SELECT @Select = '
SELECT
identity(int,1,1) AS OrderID,
VGoodsLocationC,
V_GBGrade,
VStartPoint,
CONVERT(CHAR(4),DTobaccoDate,112) AS DTobaccoDate,
VReserveType,
VSBY,
DInDate,
VTranCode,
V_OldGBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##LocationsStorageReturnOrder
FROM
(SELECT
A.*,
B.DTobaccoDate,
B.VSBY,
B.VReserveType,
B.DInDate
FROM
#TempLocationIn A
LEFT JOIN T_StorRealIn B
ON
A.Vtrancode = B.Vtrancode
ORDER BY A.VGoodsLocationC ) AS LocationsMoveStorage '
+ @FinllyCondition +'
GROUP BY
VGoodsLocationC,V_GBGrade,VStartPoint,DTobaccoDate,VReserveType,VSBY,DInDate,VTranCode,V_OldGBGrade'
EXEC (@Select) -- select * from ##LocationsStorageReturnOrder -- 最终初烟货位库存结果集
---------------------------
未完全优化
---------------------------
无法完成优化任务的原因:
1、我并不是很清楚你业务的逻辑,只是去大概的、估量的优化(特别是第一步,数据量稍微大一点的表)。
2、无法完成优化的原因还在于子过程太多,每次建立Fiter和生成要DefaultView要花费时间,这还是小因素。
3、最大因素在于贵公司同事的一些处理方法上有完全的偏向,不需要拿太多临时表去处理,交换数据完全可以通过变量或表变量,难道不考虑每一次I/O开销有多大吗?
--------------------------------
如果你觉得不妥,我会在明天晚上给你完全优化,今天仅仅优化了I/O和子查询。并没有优化业务处理逻辑,对不起了
#TempLocationIn
SET
#TempLocationIn.IPackageCount = #TempLocationIn.IPackageCount - TempLocationOut.IPackageCount,
#TempLocationIn.NWeight = #TempLocationIn.NWeight - TempLocationOut.NWeight
FROM (
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
( SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
V_OutStorehouseInfo
WHERE
VGoodsLocationC IN (SELECT VGoodsLocationC FROM ##storInTemp)
GROUP BY
VGoodsLocationC,Vtrancode, VGoodsLocation, V_OldGBGrade,V_GBGrade
UNION ALL
SELECT
VGoodsLocationC_Out,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
V_StorMoveInfo
WHERE
VGoodsLocationC_Out
IN (SELECT VGoodsLocationC FROM ##storInTemp)
AND V_CommitFlag = '已经提交'
GROUP BY
VGoodsLocationC_Out,Vtrancode,V_ProducingArea,V_OldGBGrade,V_GBGrade) AS storOutTemp
GROUP BY
VGoodsLocationC,Vtrancode,VGoodsLocation,V_OldGBGrade,V_GBGrade) AS TempLocationOut
WHERE
TempLocationOut.[VGoodsLocationC] = #TempLocationIn.[VGoodsLocationC] AND
TempLocationOut.[Vtrancode] = #TempLocationIn.[Vtrancode] AND
TempLocationOut.[VGoodsLocation] = #TempLocationIn.[VStartPoint] AND
TempLocationOut.[V_OldGBGrade] = #TempLocationIn.[V_OldGBGrade] AND
TempLocationOut.[V_GBGrade] = #TempLocationIn.[V_GBGrade] 这段是有问题的,执行时间太长了,还出错
DECLARE @Select varchar(8000)
-- 货位入库信息
SELECT @Select = '
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##storInTemp
FROM (
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight FROM V_InStorehouseInfo '
+ @Condition + 'UNION ALL
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight FROM V_InStorehouseInfo
WHERE VGoodsLocationC in (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + ')
) A
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade'
--此处优化代码没减少,但是性能可以提升不少
--原因V_InStorehouseInfo有30000多条数据如果有IN(子查询30000多条)的话会增加原基础上30%(我执行计划得到)开销
EXEC (@Select)
-- 移库移入数 T_StorMoveSub
-- 加上移库移入数
SET @Select = '
INSERT INTO ##storInTemp
SELECT
VGoodsLocationC_In,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
FROM
V_StorMoveInfo
WHERE
V_CommitFlag = ''已经提交''
AND (VGoodsLocationC_In
IN (SELECT VGoodsLocationC FROM ##storInTemp )
OR VGoodsLocationC_In
IN (SELECT VGoodsLocationC_In FROM V_StorMoveInfo '
+ @MoveCondition + '))
GROUP BY
VGoodsLocationC_In, VTranCode,V_ProducingArea,V_OldGBGrade,V_GBGrade'
EXEC (@Select) -- 获取货位冲账信息
SELECT
VGoodsLocationC,
V_TranCode,
V_ProducingArea,
V_GBGradeOld,
V_GBGrade,
I_PackageCountBalance,
N_WeightBalance
INTO
#TempLocationStrikeBalance
FROM
V_StorStrikeBalanceInfo
WHERE
VGoodsLocationC
IN (SELECT VGoodsLocationC FROM ##storInTemp)
-- 插入冲账数据进行计算
INSERT INTO
##storInTemp (
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC,
V_TranCode,
V_ProducingArea,
V_GBGradeOld,
V_GBGrade,
I_PackageCountBalance,
N_WeightBalance
FROM
#TempLocationStrikeBalance
-- 入库 + 移库移入 + 冲账
SELECT
VGoodsLocationC,
Vtrancode,
VStartPoint,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempLocationIn
FROM
##storInTemp
GROUP BY
VGoodsLocationC,Vtrancode,VStartPoint,V_OldGBGrade,V_GBGrade
-- 货位出库信息
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##storOutTemp
FROM
V_OutStorehouseInfo
WHERE
VGoodsLocationC IN (SELECT VGoodsLocationC FROM ##storInTemp)
GROUP BY
VGoodsLocationC,Vtrancode, VGoodsLocation, V_OldGBGrade,V_GBGrade -- 移库移出数
SELECT
VGoodsLocationC_Out,
VTranCode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempMoveOutSub
FROM
V_StorMoveInfo
WHERE
VGoodsLocationC_Out
IN (SELECT VGoodsLocationC FROM ##storInTemp)
AND V_CommitFlag = '已经提交'
GROUP BY
VGoodsLocationC_Out,Vtrancode,V_ProducingArea,V_OldGBGrade,V_GBGrade
-- 加上移库移出数--
INSERT INTO
##storOutTemp (
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
)
SELECT
VGoodsLocationC_Out,
Vtrancode,
V_ProducingArea,
V_OldGBGrade,
V_GBGrade,
IPackageCount,
NWeight
FROM
#TempMoveOutSub
-- 出库 + 移库移出
SELECT
VGoodsLocationC,
Vtrancode,
VGoodsLocation,
V_OldGBGrade,
V_GBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
#TempLocationOut
FROM
##storOutTemp
GROUP BY
VGoodsLocationC,Vtrancode,VGoodsLocation,V_OldGBGrade,V_GBGrade UPDATE
#TempLocationIn
SET
#TempLocationIn.IPackageCount = #TempLocationIn.IPackageCount - #TempLocationOut.IPackageCount,
#TempLocationIn.NWeight = #TempLocationIn.NWeight - #TempLocationOut.NWeight
FROM
#TempLocationOut
WHERE
#TempLocationOut.[VGoodsLocationC] = #TempLocationIn.[VGoodsLocationC] AND
#TempLocationOut.[Vtrancode] = #TempLocationIn.[Vtrancode] AND
#TempLocationOut.[VGoodsLocation] = #TempLocationIn.[VStartPoint] AND
#TempLocationOut.[V_OldGBGrade] = #TempLocationIn.[V_OldGBGrade] AND
#TempLocationOut.[V_GBGrade] = #TempLocationIn.[V_GBGrade]
---------------------------------------------------------------------------------------------------
DELETE FROM #TempLocationIn WHERE IPackageCount = 0 AND NWeight = 0
-- 获取发货地 年度 收购类型 入库日期 运单号 司磅员
SELECT
A.*,
B.DTobaccoDate,
B.VSBY,
B.VReserveType,
B.DInDate
INTO
##LocationsMoveStorage
FROM
#TempLocationIn A
LEFT JOIN
T_StorRealIn B
ON
A.Vtrancode = B.Vtrancode
ORDER BY A.VGoodsLocationC SELECT @Select = '
SELECT
identity(int,1,1) AS OrderID,
VGoodsLocationC,
V_GBGrade,
VStartPoint,
CONVERT(CHAR(4),DTobaccoDate,112) AS DTobaccoDate,
VReserveType,
VSBY,
DInDate,
VTranCode,
V_OldGBGrade,
SUM(IPackageCount) AS IPackageCount,
SUM(NWeight) AS NWeight
INTO
##LocationsStorageReturnOrder
FROM
##LocationsMoveStorage'
+ @FinllyCondition +'
GROUP BY
VGoodsLocationC,V_GBGrade,VStartPoint,DTobaccoDate,VReserveType,VSBY,DInDate,VTranCode,V_OldGBGrade'
EXEC (@Select) -- select * from ##LocationsStorageReturnOrder -- 最终初烟货位库存结果集