zoukankan      html  css  js  c++  java
  • 又一个查询,哥整了一天,NND有点受不鸟了

    --参考表--
    With RM(MPartNo,MPartName,UM,MSupplier,Stock,MType)
    as
    ( 
     select 
     p_partno MPartNo,p_partname MPartName,p_unit UM,p_supplier MSupplier,
     Stock,p_type MType
     from p_partno_rm
    ), --计算期初库存----
     RMBeforeQty_tmp(MPartNo, BefQty)
    as
    (
      --电线部分统计
      select  MPartNo, 
      Sum(SumInQty)-Sum(SumOutQty)BefQty
      From(
    	   Select partno MPartNo,
    	   Sum(isnull(inQty,0)) * 1000  SumInQty,
    	   0 SumOutQty From Storage_Cable 
    	   Where Indate <'$BDate'
    	   group by partno
           --如果电线发料信息在storage_fixbin中出现,调整下面代码
    	   Union all
    
    	   Select partno MPartNo,
    	   0 SumInQty,
    	   Sum(isnull(outQty,0)) * 1000  SumOutQty From Storage_Cable 
    	   Where outdate <'$BDate'
    	   group by partno
          ) as t_cable_befQty
          group by MPartNo
      Union all
      --其他材料-----------------------
      select  MPartNo, 
      Sum(SumInQty)-Sum(SumOutQty)BefQty
      From(
    	  select partno MPartNo,
    	  sum(isnull(inqty,0)) SumInQty,
    	  0 SumOutQty
    	  From Storage_RM 
    	  Where TicketType <> '归还' 
    	  And Indate <'$BDate'
    	  Group by partno
    
    	  Union all
          --这里需要考虑排除电线
    	  select partno MPartNo,
    	  0 SumInQty,
    	  sum(isnull(outqty,0)) SumOutQty
    	  From Storage_fixBin
    	  Where ptype = '发料'  And TicketStatus <> '借用'
    	  And outdate <'$BDate'
    	  Group by partno
    
       ) as t_rm_befQty
       group by MPartNo
    
       
    ), --再次汇总求期初库存
    RMBefQty(MPartNo,BefQty)
    as
    (
      Select MPartNo, Sum(BefQty) BefQty From RMBeforeQty_tmp
      group by MPartNo
    
    ), --电线入库统计
    CableIn(MPartNo,ProductionIn,BuyIn,InventoryIn,OtherIn,InventoryProfitIn,ReturnIn)
    as
    (
       Select partno MPartNo,
       Sum(isnull(inQty,0)) * 1000  ProductionIn,
       0 BuyIn, 0 InventoryIn, 0 OtherIn, 0 InventoryProfitIn, 0 ReturnIn
       From Storage_Cable 
       Where Indate >='$BDate' and indate <='$EDate 23:59:59'
       group by partno
    
    ),--电线出库统计
    CableOut (MPartNo,PlanOut,SellOut,OutPlanOut,
              InventoryLossesOut,BadMReturnOut,BorrowOut,OtherOut)
    as
    (
       Select partno MPartNo,
       Sum(isnull(outQty,0)) * 1000  PlanOut, 
       0 SellOut,0 OutPlanOut,0 InventoryLossesOut,0 BadMReturnOut,0 BorrowOut,0 OtherOut
       From Storage_Cable 
       Where outdate >='$BDate' and outdate <='$EDate 23:59:59'
       group by partno
    ),
    --材料入库
    RMIn(MPartNo,ProductionIn,BuyIn,InventoryIn,OtherIn,InventoryProfitIn,ReturnIn)
    as
    (
    
       --其他材料---
       Select MPartNo,
       Sum(ProductionIn) ProductionIn,
       Sum(BuyIn) BuyIn,
       Sum(InventoryIn)InventoryIn,
       Sum(OtherIn)OtherIn, 
       Sum(InventoryProfitIn) InventoryProfitIn,
       Sum(ReturnIn)ReturnIn
       From(
    	   Select partno MPartNo,
    	   Case When tickettype='生产缴库' Then isnull(inQty,0)
    			Else 0 End as ProductionIn,
    	   Case When tickettype='采购入库' Then isnull(inQty,0)
    			Else 0 End as BuyIn,
    	   Case When tickettype='盘存入库' Then isnull(inQty,0)
    			Else 0 End as InventoryIn,
    	   Case When tickettype='其它入库' Then isnull(inQty,0)
    			Else 0 End as OtherIn,
    	   Case When tickettype='盘盈入库' Then isnull(inQty,0)
    			Else 0 End as InventoryProfitIn,
    	   Case When tickettype='归还' Then isnull(inQty,0)
    			Else 0 End as ReturnIn
    	   From Storage_RM
    	   Where 
    	   Indate >='$BDate' and indate <='$EDate 23:59:59'
       )as t
       group by MPartNO
      
    
    ), --材料出库
    RMOut(MPartNo,PlanOut,SellOut,OutPlanOut,
    InventoryLossesOut,BadMReturnOut,BorrowOut,OtherOut)
    as
    (
       Select MPartNo,
       Sum(PlanOut) PlanOut,
       Sum(SellOut) SellOut,
       Sum(OutPlanOut) OutPlanOut,
       Sum(InventoryLossesOut) InventoryLossesOut,
       Sum(BadMReturnOut) BadMReturnOut,
       Sum(BorrowOut) BorrowOut,
       Sum(OtherOut) OtherOut
       From(
    	   Select partno MPartNo,
    	   Case When ticketstatus='生产性领料' Then isnull(OutQty,0)
    			Else 0 End as PlanOut,
    	   Case When ticketstatus='销售出库' Then isnull(OutQty,0)
    			Else 0 End as SellOut,
    	   Case When ticketstatus='计划外出库' Then isnull(OutQty,0)
    			Else 0 End as OutPlanOut,
    	   Case When ticketstatus='盘亏出库' Then isnull(OutQty,0)
    			Else 0 End as InventoryLossesOut,
    	   Case When ticketstatus='废料退货' Then -isnull(InQty,0)
    			Else 0 End as BadMReturnOut,
    	   Case When ticketstatus='借用' Then isnull(OutQty,0)
    			Else 0 End as BorrowOut,
    	   Case When ticketstatus='其它出库' Then isnull(OutQty,0)
    			Else 0 End as OtherOut
    	   
    	   From Storage_Fixbin
    	   Where ptype = '发料' 
    	   And Outdate >='$BDate' and Outdate <='$EDate 23:59:59'
       ) as t
       group by MPartNo
    
    
    ),--入库集合
    SetIn(MPartNo,ProductionIn,BuyIn,InventoryIn,OtherIn,InventoryProfitIn,ReturnIn)
    as
    (
      Select * From CableIn
      Union
      Select * From RMIn
    
    ),--出库集合
    SetOut(MPartNo,PlanOut,SellOut,OutPlanOut,
    InventoryLossesOut,BadMReturnOut,BorrowOut,OtherOut)
    as
    (
      Select * From CableOut
      Union
      Select * From RMOut
    
    )
    
    Select *,
    ProductionIn + BuyIn+ InventoryIn +OtherIn +InventoryProfitIn As SumIn,
    PlanOut + SellOut + OutPlanOut + InventoryLossesOut +BadMReturnOut +OtherOut As SumOut,
    BefQty+ProductionIn + BuyIn+ InventoryIn +OtherIn +InventoryProfitIn - (PlanOut + SellOut + OutPlanOut + InventoryLossesOut +BadMReturnOut +OtherOut)As Inventory
    From
    (
    	select RM.*,BefQty,
    	isnull(ProductionIn,0) ProductionIn,
    	isnull(BuyIn,0) BuyIn,
    	isnull(InventoryIn,0) InventoryIn,
    	isnull(OtherIn,0) OtherIn,
    	isnull(InventoryProfitIn,0) InventoryProfitIn,
    	isnull(ReturnIn,0) ReturnIn,
    	isnull(PlanOut,0) PlanOut,
    	isnull(SellOut,0) SellOut,
    	isnull(OutPlanOut,0) OutPlanOut,
    	isnull(InventoryLossesOut,0) InventoryLossesOut,
    	isnull(BadMReturnOut,0) BadMReturnOut,
    	isnull(BorrowOut,0) BorrowOut,
    	isnull(OtherOut,0) OtherOut
        from 
    	RM left join RMBefQty On RM.MPartNo=RMBefQty.MPartNo
    	   left join SetIn  On RM.MPartNo=SetIn.MPartNo
    	   left join SetOut On RM.MPartNo=SetOut.MPartNo
    ) as t
    Where 1=1
    $Condition         
    
    
  • 相关阅读:
    BZOJ 3205 [Apio2013]机器人 ——斯坦纳树
    BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
    HDU 1423 Greatest Common Increasing Subsequence ——动态规划
    BZOJ 3309 DZY Loves Math ——莫比乌斯反演
    POJ 1038 Bugs Integrated, Inc. ——状压DP
    POJ 3693 Maximum repetition substring ——后缀数组
    POJ 2699 The Maximum Number of Strong Kings ——网络流
    POJ 2396 Budget ——有上下界的网络流
    BZOJ 4650 [Noi2016]优秀的拆分 ——后缀数组
    源码安装python
  • 原文地址:https://www.cnblogs.com/wdfrog/p/2245791.html
Copyright © 2011-2022 走看看