CREATE PROC [dbo].[GetSalePriceNew] ( @FDate date, @FMaterID int, @Fprice decimal(28,10) out, @FDateO nvarchar(50) out, @FAmount decimal(28,10) out,--金额 @FQTY decimal(28,10) out ,--数量, @FStockId nvarchar(1000) ) as begin --declare @FDate date, --@FMaterID int, --@Fprice decimal(28,10) , --@FDateO nvarchar(50) , --@FAmount decimal(28,10) ,--金额 --@FQTY decimal(28,10) ,--数量, --@FStockId nvarchar(1000) --SET @FDate = '' --SET @FMaterID = 0 --SET @FStockId = 0 --exec GetSalePriceNew @FDate , @FMaterID ,@Fprice out , @FDateO out ,@FAmount out,@FQTY out ,@FStockId --SELECT @FDate,@FMaterID,@Fprice,@FDateO,@FAmount,@FQTY,@FStockId declare @Fyear int declare @Fmonth int declare @FNumber nvarchar(100) SELECT @FNumber= fnumber FROM T_BD_MATERIAL WHERE FMATERIALID=@FMaterID SELECT TOP 1 @Fyear = FYEAR ,@Fmonth = FPERIOD ,@FAMOUNT = sum(FAMOUNT) ,@FQty = sum(FQTY) ,@Fprice = CASE WHEN @FQty<>0 THEN ROUND( @FAMOUNT/@FQty,6) ELSE 0 END ,@FDateO= CONVERT(nvarchar(10),FYEAR)+'.'+CONVERT(nvarchar(10),FPERIOD) FROM ( SELECT a.FNUMBER,THO.FYEAR ,THO.FPERIOD,THIB.FAMOUNT,THIB.FQTY FROM T_HS_INIVSTOCKDIMENSION THS --库存维度实体对象 INNER JOIN T_HS_INIVBALANCE THIB --即时库存期初余额 当期表 ON (THS.FENTRYID = THIB.FDIMEENTRYID AND THIB.FENDINITKEY = '0') INNER JOIN T_HS_OUTACCTG THO ON THIB.FID = THO.FID INNER JOIN T_HS_CALDIMENSIONS TCH ON TCH.FDIMENSIONID = THO.FDIMENSIONID INNER JOIN T_BD_MATERIAL a ON a.FMATERIALID=THS.FMATERIALID WHERE ((TCH.FACCTSYSTEMID = 1 AND TCH.FACCTPOLICYID = 1) AND THS.FSTOCKORGID = 101542) AND a.FNUMBER=@FNumber AND @FStockId = THS.FSTOCKID UNION ALL SELECT a.FNUMBER, THO.FYEAR ,THO.FPERIOD, THIB.FAMOUNT ,THIB.FQTY FROM T_HS_INIVSTOCKDIMENSION THS --库存维度实体对象 INNER JOIN T_HS_INIVBALANCE_H THIB --即时库存期初余额 历史表 ON (THS.FENTRYID = THIB.FDIMEENTRYID AND THIB.FENDINITKEY = '0') INNER JOIN T_HS_OUTACCTG THO ON THIB.FID = THO.FID INNER JOIN T_HS_CALDIMENSIONS TCH ON TCH.FDIMENSIONID = THO.FDIMENSIONID INNER JOIN T_BD_MATERIAL a ON a.FMATERIALID=THS.FMATERIALID WHERE ((TCH.FACCTSYSTEMID = 1 AND TCH.FACCTPOLICYID = 1) AND THS.FSTOCKORGID = 101542) AND a.FNUMBER = @FNumber AND @FStockId = THS.fstockid ) t GROUP BY FYEAR ,FPERIOD HAVING FYEAR*100 + FPERIOD <= year(@FDate) * 100 + MONTH(@FDate) AND sum(FQTY) >0 ORDER BY FYEAR DESC , FPERIOD DESC RETURN END