一个统计查询写的哥要哭了
整了2个小时:
--列出存在的线束 with WiringHarness(PartNo,CarType,PartName,Setting) as ( select tp.PartNo,tp.CarType,pp.p_setting Setting,pp.p_partname PartName from ( select p_partno PartNo,p_yw carType from p_partno group by p_partno,p_yw Union select partno PartNo, p_yw carType from inticket where p_bs = '1' group by partno,p_yw Union select partno PartNo,p_yw carType from outticket where p_bs = '1' group by partno,p_yw )as tp left join p_Partno pp ON tp.PartNo=pp.p_partno And tp.CarType=pp.p_yw ),--计算期初库存 WHBeforeInventory(PartNo,CarType,PartName,Setting,BeforeQty) as ( select *, ( isnull(( select sum(Inqty) from inticket where ticketstatus = '关闭' and p_bs = '1' And WH.PartNo=inticket.PartNo And WH.CarType=inticket.p_yw And InDate < '2011-10-10' ),0) - --这里有个减号!! isnull(( Select sum(isnull(A.OutQty,0)) from OutticketList A left join outticket B ON A.partno = B.partno and A.subid = B.subid and A.outticketid = B.outticketid where A.partno =WH.PartNo and A.Status = '完成' and ltrim(rtrim(B.p_yw)) =WH.CarType and B.p_bs = '1' and B.OutDate <'2011-10-10' ),0) )as BeforeQty from WiringHarness WH ), --指定时间段内的入库统计 WHIn (PartNo,CarType,SumProductionIn,SumRepairIn,SumReturnIn,SumOtherIn) as ( Select PartNo,p_yw CarType, Sum(ProductionIn) SumProductionIn, Sum(RepairIn) SumRepairIn, Sum(ReturnIn) SumReturnIn, Sum(OtherIn) SumOtherIn from ( Select Case When Tickettype='生产缴库' Then isnull(InQty,0) Else 0 End as ProductionIn, Case When Tickettype='返修入库' Then isnull(InQty,0) Else 0 End as RepairIn, Case When Tickettype='退货入库' Then isnull(InQty,0) Else 0 End as ReturnIn , Case When Tickettype='其它入库' Then isnull(InQty,0) Else 0 End as OtherIn, partNo,p_yw From InTicket where TicketStatus = '关闭' and p_bs = '1' and InDate >='2011-10-10' and InDate <='2011-11-3 23:59:59' ) as t01 group by partno, p_yw ), --指定时间段内的出库统计 WHOut(PartNo,CarType,SumRepairOut,SumTransferOut,SumOutPlanOut,SumOtherOut,SumRetailOut) as ( Select PartNo,CarType, Sum(RepairOut) SumRepairOut, Sum(TransferOut) SumTransferOut, Sum(OutPlanOut) SumOutPlanOut, Sum(OtherOut) SumOtherOut, Sum(RetailOut) SumRetailOut From ( Select B.partNo,B.p_yw as CarType, Case When Ticktype='返修出库' Then isnull(A.OutQty,0) Else 0 End as RepairOut, Case When Ticktype='转移出库' Then isnull(A.OutQty,0) Else 0 End as TransferOut, Case When Ticktype='计划外出库' Then isnull(A.OutQty,0) Else 0 End as OutPlanOut , Case When Ticktype='其它出库' Then isnull(A.OutQty,0) Else 0 End as OtherOut, Case When Ticktype='个体零售' Then isnull(A.OutQty,0) Else 0 End as RetailOut From OutticketList A left join outticket B ON A.partno = B.partno and A.subid = B.subid and A.outticketid = B.outticketid where A.Status = '完成' and B.p_bs = '1' and OutDate >='2011-10-10' and OutDate <='2011-11-3 23:59:59' ) as t02 group by PartNo,CarType ) select *, BeforeQty+TotalIn-TotalOut as Inventory from( select WHB.*, SumProductionIn,SumRepairIn,SumReturnIn,SumOtherIn, SumRepairOut,SumTransferOut,SumOutPlanOut,SumOtherOut,SumRetailOut, (isnull(SumProductionIn,0)+isnull(SumRepairIn,0)+isnull(SumReturnIn,0)+isnull(SumOtherIn,0)) as TotalIn , (isnull(SumRepairOut,0)+isnull(SumTransferOut,0)+isnull(SumOutPlanOut,0)+isnull(SumOtherOut,0)+isnull(SumRetailOut,0)) as TotalOut from WHBeforeInventory WHB Left Join WHIn ON WHB.PartNo=WHIn.PartNO And WHB.CarType=WHIn.CarType Left Join WHOut On WHB.PartNo=WHOut.PartNo And WHB.CarType=WHOut.CarType ) as t001