diff --git a/6.预算销售与实际销售对比分析报表.sql b/6.预算销售与实际销售对比分析报表.sql new file mode 100644 index 0000000..ee4e3ca --- /dev/null +++ b/6.预算销售与实际销售对比分析报表.sql @@ -0,0 +1,148 @@ + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +ALTER proc [dbo].[P_BudgeSaleAndActualSaleReport] +( + @FYear nvarchar(10), --- + @FStartMonth nvarchar(10), ---ʼ· + @FEndMonth nvarchar(10), ---· + @CustomerId nvarchar(max), ---ѡͻID + @FBMMaterialGroup nvarchar(max) ---ԤID +) +as +BEGIN + +DECLARE @sql NVARCHAR(MAX),@where2 NVARCHAR(max)='',@where3 NVARCHAR(max)=''; +DECLARE @begintime DATETIME,@endtime DATETIME; + + DECLARE @i int=@FStartMonth,@sql2 nvarchar(max)=''; + while(@i<=@FEndMonth) + BEGIN + IF(@i<@FEndMonth) + BEGIN + SELECT @sql2 +='FMONTH'+CONVERT(nvarchar(10),@i)+'+'; + END + ELSE + BEGIN + SELECT @sql2 +='FMONTH'+CONVERT(NVARCHAR(10),@i); + END + + SELECT @i=@i+1; + END + +SELECT @begintime= + CAST( + @FYear + '-' + + RIGHT('0' + @FStartMonth, 2) + '-' + + RIGHT('0' + 1, 2) + AS DATE + ), @endtime= + CAST( + @FYear + '-' + + RIGHT('0' + @FEndMonth, 2) + '-' + + RIGHT('0' + 1, 2) + AS DATE + ); + + SELECT @endtime=DATEADD(MONTH,1,@endtime); + +IF(ISNULL(@CustomerId,'') <> '') +BEGIN + SELECT @CustomerId=CHAR(39)+ REPLACE(@CustomerId, ',', CHAR(39) + ',' + CHAR(39))+CHAR(39); + + SELECT @where2=' and t3.FNUMBER in ('+@CustomerId+')'; +END + + +IF(ISNULL(@FBMMaterialGroup,'') <> '') +BEGIN + SELECT @FBMMaterialGroup=CHAR(39)+ REPLACE(@FBMMaterialGroup, ',', CHAR(39) + ',' + CHAR(39))+CHAR(39); + SELECT @where3=' and t5.FNUMBER in ('++@FBMMaterialGroup+')'; +end + +-- ̬ƴ SQL ַ +SET @sql = N' +SELECT + [ͻ], + [ͻ], + [Ԥ], + -- ֶθʽ + CAST([Ԥܶ] AS DECIMAL(18,2)) AS [Ԥܶ], + CAST([ʵܶ] AS DECIMAL(18,2)) AS [ʵܶ], + -- ֶθʽ + CAST([Ԥ] AS DECIMAL(18,2)) AS [Ԥ], + CAST([ʵ] AS DECIMAL(18,2)) AS [ʵ], + -- ֶθʽ + CAST([Ԥ۵] AS DECIMAL(18,2)) AS [Ԥ۵], + -- ֶθʽ + [ܽ] = CAST( ROUND([Ԥܶ] - [ʵܶ], 2) AS DECIMAL(18,2)) , + [] = CAST( ROUND([Ԥ] - [ʵ], 2) AS DECIMAL(18,2)) , + [ʵƽ۵] = CAST( CASE + WHEN [ʵ] != 0 THEN ROUND([ʵܶ] / [ʵ], 2) + ELSE 0 + END AS DECIMAL(18,2)) , + [۵۲] = CAST( CASE + WHEN [ʵ] != 0 THEN ROUND(([ʵܶ] / [ʵ]) - [Ԥ۵], 2) + ELSE ROUND([Ԥ۵], 2) end AS DECIMAL(18,2)) +FROM ( + SELECT + t3.FNUMBER AS [ͻ], + t4.FNAME AS [ͻ], + t5.FNUMBER AS [Ԥ], + isnull( ROUND(('+@sql2+') * FPrice, 2),0) AS [Ԥܶ], + ( + SELECT ROUND(SUM(bb.FNOTAXAMOUNT), 2) + FROM dbo.T_AR_RECEIVABLE aa + LEFT JOIN T_AR_RECEIVABLEENTRY bb ON aa.FID = bb.FID + INNER JOIN T_BD_MATERIAL matal2 ON bb.FMATERIALID = matal2.FMATERIALID + INNER JOIN VHUB_T_BMMGroupLinkTable cc ON matal2.FMATERIALGROUP = cc.[FMATERIALGROUP] + WHERE + aa.FCUSTOMERID =YingShou.FCUSTOMERID + AND aa.FDATE >= @begintime + AND aa.FDATE < @endtime + AND cc.[FBMMATERIALGROUP] = t5.FID + ) AS [ʵܶ], + isnull( ('+@sql2+'),0) AS [Ԥ], + ( + SELECT SUM(bb.FPriceQty) + FROM dbo.T_AR_RECEIVABLE aa + LEFT JOIN T_AR_RECEIVABLEENTRY bb ON aa.FID = bb.FID + INNER JOIN T_BD_MATERIAL matal2 ON bb.FMATERIALID = matal2.FMATERIALID + INNER JOIN VHUB_T_BMMGroupLinkTable cc ON matal2.FMATERIALGROUP = cc.[FMATERIALGROUP] + WHERE + aa.FCUSTOMERID =YingShou.FCUSTOMERID + AND aa.FDATE >= @begintime + AND aa.FDATE < @endtime + AND cc.[FBMMATERIALGROUP] = t5.FID + ) AS [ʵ], + isnull( FPrice,0) AS [Ԥ۵] + FROM ( SELECT DISTINCT aa.FCUSTOMERID , cc.[FBMMATERIALGROUP] + FROM dbo.T_AR_RECEIVABLE aa + LEFT JOIN T_AR_RECEIVABLEENTRY bb ON aa.FID = bb.FID + INNER JOIN T_BD_MATERIAL matal2 ON bb.FMATERIALID = matal2.FMATERIALID + INNER JOIN VHUB_T_BMMGroupLinkTable cc ON matal2.FMATERIALGROUP = cc.[FMATERIALGROUP] + where aa.FDATE >= @begintime + AND aa.FDATE < @endtime + ) YingShou + FULL JOIN + VHUB_t_Cust_Entry100007 t1 + ON t1.FCUSTOMERID=YingShou.FCUSTOMERID AND YingShou.FBMMATERIALGROUP=t1.FBMMATERIALGROUP + LEFT JOIN (select * from VHUB_t_Cust100008 tt3 where tt3.FYEARS = @FYear) t2 ON t1.FID = t2.FID + LEFT JOIN T_BD_CUSTOMER t3 ON isnull(YingShou.FCUSTOMERID,t1.FCUSTOMERID) = t3.FCUSTID + LEFT JOIN T_BD_CUSTOMER_L t4 ON t3.FCUSTID = t4.FCUSTID + INNER JOIN VHUB_BD_BMMaterialGroup t5 ON isnull(YingShou.FBMMATERIALGROUP,t1.FBMMATERIALGROUP)= t5.FID + WHERE 1=1 + '+@where2+@where3+' +) AS aaa'; + +PRINT @sql; +-- ִж̬ SQL +EXEC sp_executesql + @sql, + N'@FYear INT, @begintime DATETIME, @endtime DATETIME', + @FYear, + @begintime, + @endtime; +END diff --git a/成本的销售明细的SQL.txt b/成本的销售明细的SQL.txt index 62af996..5cf4f57 100644 --- a/成本的销售明细的SQL.txt +++ b/成本的销售明细的SQL.txt @@ -1,16 +1,29 @@ -select top 100 T1.FBILLNO,T2.FENTRYID,t2.FMaterialID,ff.FNUMBER, FMustQty ,t4.*,T6.* from T_SAL_OUTSTOCK T1 inner join T_SAL_OUTSTOCKENTRY T2 -inner join T_SAL_OUTSTOCKENTRY_C T3 on T3.FENTRYID = T2.FENTRYID -ON T1.FID = T2.FID - inner join T_SAL_OUTSTOCKENTRY_CE T4 on T3.FENTRYID = T4.FENTRYID - left join T_HS_CALDIMENSIONS T5 on T3.FDIMENSIONID = T5.FDIMENSIONID - left join T_BD_EXPENSE_L T6 on T4.FEXPENSEID = T6.FEXPID and T6.FLOCALEID = 2052 - left join T_BD_MATERIAL ff on t2.FMaterialID=ff.FMaterialID -order by T2.FENTRYID desc - - - SELECT T1.FCUSTOMERID,t1.FDOCUMENTSTATUS +DECLARE @sql NVARCHAR(MAX),@where2 NVARCHAR(max)='',@where3 NVARCHAR(max)='', @FStartMonth nvarchar(10), + @FEndMonth nvarchar(10) ; +DECLARE @begintime DATETIME,@endtime DATETIME; + + DECLARE @i int=@FStartMonth,@sql2 nvarchar(max)=''; + while(@i<=@FEndMonth) + BEGIN + IF(@i<@FEndMonth) + BEGIN + SELECT @sql2 +='FMONTH'+CONVERT(nvarchar(10),@i)+'+'; + END + ELSE + BEGIN + SELECT @sql2 +='FMONTH'+CONVERT(NVARCHAR(10),@i); + END + + SELECT @i=@i+1; + END + + SELECT + t3.FNUMBER AS [客户编码], + t4.FNAME AS [客户名称], + t5.FNUMBER AS [预算物料组], + T1.FCUSTOMERID,t1.FDOCUMENTSTATUS , cc.[FBMMATERIALGROUP],SUM(FRealQty) AS FRealQty ,(SELECT SUM(FREALQTY) FROM dbo.T_SAL_RETURNSTOCK tui LEFT JOIN T_SAL_RETURNSTOCKENTRY tuide ON tui.FID=tuide.FID WHERE tui.FAPPROVEDATE>='2025-05-01' AND tui.FAPPROVEDATE<'2025-06-01' AND tui.FDOCUMENTSTATUS='C' @@ -34,11 +47,15 @@ select sum(FFEEAMOUNT) INNER join T_SAL_OUTSTOCKENTRY T2 ON T1.FID = T2.FID INNER JOIN T_BD_MATERIAL matal2 ON T2.FMATERIALID = matal2.FMATERIALID INNER JOIN VHUB_T_BMMGroupLinkTable cc ON matal2.FMATERIALGROUP = cc.[FMATERIALGROUP] + LEFT JOIN T_BD_CUSTOMER t3 ON t1.FCUSTOMERID= t3.FCUSTID + LEFT JOIN T_BD_CUSTOMER_L t4 ON t3.FCUSTID = t4.FCUSTID + INNER JOIN VHUB_BD_BMMaterialGroup t5 ON cc.[FBMMATERIALGROUP]= t5.FID WHERE T1.FAPPROVEDATE>='2025-05-01' AND t1.FAPPROVEDATE<'2025-06-01' - GROUP BY T1.FCUSTOMERID -, cc.[FBMMATERIALGROUP],t1.FDOCUMENTSTATUS - + GROUP BY T1.FCUSTOMERID, cc.[FBMMATERIALGROUP],t1.FDOCUMENTSTATUS, t3.FNUMBER , + t4.FNAME , t5.FNUMBER + --SELECT * FROM VHUB_T_BMMGroupLinkTable + -- SELECT * FROM VHUB_BD_BMMaterialGroup --select T1.FID, T1.FBILLNO,T2.FENTRYID,t2.FMaterialID,ff.FNUMBER, FMustQty ,t4.*,T6.* --from T_SAL_OUTSTOCK T1 inner join T_SAL_OUTSTOCKENTRY T2 --inner join T_SAL_OUTSTOCKENTRY_C T3 on T3.FENTRYID = T2.FENTRYID @@ -49,4 +66,3 @@ select sum(FFEEAMOUNT) -- left join T_BD_MATERIAL ff on t2.FMaterialID=ff.FMaterialID -- WHERE T1.FAPPROVEDATE>='2025-05-01' AND t1.FAPPROVEDATE<'2025-06-01' --order by T2.FENTRYID desc -