201 lines
12 KiB
Transact-SQL
201 lines
12 KiB
Transact-SQL
IF OBJECT_ID('dbo.[RP_XSYSCBYSJCB]', 'P') IS NOT NULL
|
|
BEGIN
|
|
DROP PROCEDURE dbo.RP_XSYSCBYSJCB;
|
|
PRINT '存储过程 dbo.[RP_XSYSCBYSJCB] 已删除';
|
|
END;
|
|
GO
|
|
|
|
-- 创建新的存储过程
|
|
CREATE PROCEDURE dbo.RP_XSYSCBYSJCB
|
|
@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;
|
|
|
|
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);
|
|
|
|
-----------退货成本数据原始表1
|
|
SELECT t1.FRETCUSTID,t44.FNAME AS CustomerName,t33.FNUMBER AS CustomerCode, T1.FID, T1.FBILLNO,T2.FENTRYID,t55.FNUMBER, FREALQTY
|
|
,t4.FAMOUNT_LC,T6.FNAME , FORMAT(t1.FDATE, 'yyyy-MM-01') AS FAPPROVEDATE2,t1.FDATE
|
|
,t55.fid AS groupID,t2.FMaterialID
|
|
INTO #tuihuoTable
|
|
FROM T_SAL_RETURNSTOCK T1 INNER JOIN T_SAL_RETURNSTOCKENTRY T2
|
|
INNER JOIN T_SAL_RETURNSTOCKENTRY_C T3 ON T3.FENTRYID = T2.FENTRYID
|
|
ON T1.FID = T2.FID
|
|
INNER JOIN T_SAL_RETURNSTOCKENTRY_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
|
|
INNER JOIN VHUB_T_BMMGroupLinkTable cc ON ff.FMATERIALGROUP = cc.[FMATERIALGROUP]
|
|
INNER JOIN VHUB_BD_BMMaterialGroup t55 ON cc.[FBMMATERIALGROUP]= t55.FID
|
|
LEFT JOIN T_BD_CUSTOMER t33 ON T1.FRETCUSTID= t33.FCUSTID
|
|
LEFT JOIN T_BD_CUSTOMER_L t44 ON t33.FCUSTID = t44.FCUSTID
|
|
WHERE T1.FDATE>=@begintime AND t1.FDATE<@endtime AND t1.FDOCUMENTSTATUS='C'
|
|
AND (@CustomerId = 'A' OR t1.FRETCUSTID IN (SELECT value FROM dbo.SplitString(@CustomerId, ',') ))
|
|
AND (@FBMMaterialGroup = 'A' OR t55.FID IN (SELECT value FROM dbo.SplitString(@FBMMaterialGroup, ',') ))
|
|
|
|
|
|
-- 退货成本金额查询SQL
|
|
SELECT a.FRETCUSTID,CustomerName,a.FNUMBER,a.FNAME,a.FID
|
|
,SUM(a.FAMOUNT_LC) AS FAMOUNT_LC,FAPPROVEDATE2,CustomerCode,groupID
|
|
INTO #TuiHuoChengBenJinE
|
|
FROM #tuihuoTable a
|
|
GROUP BY a.FRETCUSTID,a.FNUMBER,a.FNAME,FAPPROVEDATE2 ,CustomerName,CustomerCode,groupID,a.FID
|
|
ORDER BY a.FRETCUSTID,FNUMBER,FAPPROVEDATE2,a.FID
|
|
|
|
|
|
---每个订单明细的退货成本数量
|
|
SELECT a.FRETCUSTID,a.FNUMBER,FAPPROVEDATE2 ,CustomerName,CustomerCode,groupID,avg(FREALQTY) AS FREALQTY ,a.FID,a.FENTRYID ,SUM(a.FAMOUNT_LC) AS FAMOUNT_LC
|
|
INTO #TuiHuoChengBenShuLiang
|
|
FROM #tuihuoTable a
|
|
GROUP BY a.FRETCUSTID,a.FNUMBER,FAPPROVEDATE2 ,CustomerName,CustomerCode,groupID ,a.FENTRYID,a.FID
|
|
|
|
|
|
|
|
------销售成本数据原始表1
|
|
SELECT t1.FCustomerID,t44.FNAME AS CustomerName,t33.FNUMBER AS CustomerCode,T1.FID, T1.FBILLNO,T2.FENTRYID,t2.FMaterialID,t55.FNUMBER, T2.FREALQTY ,t4.FAMOUNT_LC,T6.FNAME , FORMAT(t1.FDATE, 'yyyy-MM-01') AS FAPPROVEDATE2
|
|
,t55.fid AS groupID
|
|
INTO #xiaoshouTable
|
|
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
|
|
INNER JOIN VHUB_T_BMMGroupLinkTable cc ON ff.FMATERIALGROUP = cc.[FMATERIALGROUP]
|
|
INNER JOIN VHUB_BD_BMMaterialGroup t55 ON cc.[FBMMATERIALGROUP]= t55.FID
|
|
LEFT JOIN T_BD_CUSTOMER t33 ON T1.FCUSTOMERID= t33.FCUSTID
|
|
LEFT JOIN T_BD_CUSTOMER_L t44 ON t33.FCUSTID = t44.FCUSTID
|
|
WHERE T1.FDATE>=@begintime AND t1.FDATE<@endtime AND t1.FDOCUMENTSTATUS='C'
|
|
AND (@CustomerId = 'A' OR t1.FCUSTOMERID IN (SELECT value FROM dbo.SplitString(@CustomerId, ',') ))
|
|
AND (@FBMMaterialGroup = 'A' OR t55.FID IN (SELECT value FROM dbo.SplitString(@FBMMaterialGroup, ',') ))
|
|
|
|
|
|
|
|
-- 销售出库成本金额查询SQL
|
|
SELECT a.FCustomerID,a. CustomerName,a.FNUMBER,a.FNAME,a.FID
|
|
,SUM(a.FAMOUNT_LC) AS FAMOUNT_LC,FAPPROVEDATE2 , CustomerCode,groupID
|
|
INTO #XiaoShouChengBenJinE
|
|
FROM #xiaoshouTable a
|
|
GROUP BY a.FCustomerID,a.FNUMBER,a.FNAME,FAPPROVEDATE2 ,CustomerName,CustomerCode,groupID ,a.FID
|
|
ORDER BY a.FCustomerID, FNUMBER,FAPPROVEDATE2;
|
|
|
|
-- 销售出库成本数量查询SQL
|
|
SELECT a.FCustomerID,a.FNUMBER,FAPPROVEDATE2 ,CustomerName,CustomerCode,groupID,avg(FREALQTY) AS FREALQTY ,a.FID,a.FENTRYID ,SUM(a.FAMOUNT_LC) AS FAMOUNT_LC
|
|
INTO #XiaoShouChengBenShuLiang
|
|
FROM #xiaoshouTable a
|
|
GROUP BY a.FCustomerID,a.FNUMBER,FAPPROVEDATE2 ,CustomerName,CustomerCode,groupID ,a.FENTRYID,a.FID
|
|
ORDER BY FID;
|
|
|
|
|
|
|
|
SELECT * , DATEFROMPARTS((bb.Year), (bb.Month), 1) AS FAPPROVEDATE INTO #TempNianDuXiaoShouYuSuan FROM NianDuXiaoShouYuSuan bb
|
|
WHERE bb.Year=2025
|
|
|
|
--SELECT * FROM #TempNianDuXiaoShouYuSuan
|
|
|
|
|
|
SELECT
|
|
ISNULL(t1.CustomerCode,'') AS [客户编码],
|
|
ISNULL(t1.CustomerName,'') AS [客户名称],
|
|
ISNULL(t1.FNUMBER,'') AS [预算物料组],
|
|
T1.FCUSTOMERID
|
|
,(SELECT SUM(aaa.FREALQTY) FROM #XiaoShouChengBenShuLiang aaa WHERE t1.FCUSTOMERID=aaa.FCUSTOMERID AND t1.FNUMBER=aaa.FNUMBER AND t1.FAPPROVEDATE2=aaa.FAPPROVEDATE2) AS [销售数量]
|
|
,ISNULL((SELECT bb.MonthValue FROM #TempNianDuXiaoShouYuSuan bb WHERE bb.FAPPROVEDATE=t1.FAPPROVEDATE2
|
|
AND bb.FBMMATERIALGROUP= t1.groupID AND bb.FCUSTOMERID=T1.FCUSTOMERID),0) [预算销售数量]
|
|
,ISNULL( (SELECT SUM(aaa.FREALQTY) FROM #TuiHuoChengBenShuLiang aaa WHERE t1.FCUSTOMERID=aaa.FRETCUSTID AND t1.FNUMBER=aaa.FNUMBER AND t1.FAPPROVEDATE2=aaa.FAPPROVEDATE2) ,0) [退货数量]
|
|
, t1.FAPPROVEDATE2 AS FAPPROVEDATE2
|
|
,ISNULL(AVG(cost.FALLAMOUNT),0) AS [预算总成本单价],ISNULL(AVG(cost.FMATERIALCOSTAMOUNT),0) AS [预算成本_材料单价],ISNULL(AVG(cost.FLABORCOSTAMOUNT),0) [预算成本_人工单价]
|
|
,ISNULL(AVG(FLABORCOSTAMOUNT),0) AS [预算成本_制费单价]
|
|
,ISNULL((SELECT SUM(aaa.FAMOUNT_LC) FROM #XiaoShouChengBenShuLiang aaa WHERE t1.FCUSTOMERID=aaa.FCUSTOMERID AND t1.FNUMBER=aaa.FNUMBER AND t1.FAPPROVEDATE2=aaa.FAPPROVEDATE2),0) [销售成本金额]
|
|
,ISNULL((SELECT SUM(aaa.FAMOUNT_LC) FROM #TuiHuoChengBenJinE aaa WHERE t1.FCUSTOMERID=aaa.FRETCUSTID AND t1.FNUMBER=aaa.FNUMBER AND t1.FAPPROVEDATE2=aaa.FAPPROVEDATE2),0) AS [退货成本金额]
|
|
,( ISNULL((SELECT SUM(jjj.FAMOUNT_LC) FROM #XiaoShouChengBenJinE jjj WHERE t1.FNUMBER=jjj.FNUMBER AND jjj.FAPPROVEDATE2=t1.FAPPROVEDATE2 AND t1.FCUSTOMERID=jjj.FCUSTOMERID AND jjj.fname='材料成本'),0)-
|
|
ISNULL((SELECT SUM(jjj.FAMOUNT_LC) FROM #TuiHuoChengBenJinE jjj WHERE t1.FNUMBER=jjj.FNUMBER AND jjj.FAPPROVEDATE2=t1.FAPPROVEDATE2 AND t1.FCUSTOMERID=jjj.FRETCUSTID AND jjj.fname='材料成本' ),0)) AS [实际成本(料)-总]
|
|
,( ISNULL((SELECT SUM(jjj.FAMOUNT_LC) FROM #XiaoShouChengBenJinE jjj WHERE t1.FNUMBER=jjj.FNUMBER AND jjj.FAPPROVEDATE2=t1.FAPPROVEDATE2 AND t1.FCUSTOMERID=jjj.FCUSTOMERID AND fname IN ('工资','委外加工费')),0)-
|
|
ISNULL((SELECT SUM(jjj.FAMOUNT_LC) FROM #TuiHuoChengBenJinE jjj WHERE t1.FNUMBER=jjj.FNUMBER AND jjj.FAPPROVEDATE2=t1.FAPPROVEDATE2 AND t1.FCUSTOMERID=jjj.FRETCUSTID AND fname IN ('工资','委外加工费') ),0)) AS [实际成本(工)-总]
|
|
,( ISNULL((SELECT SUM(jjj.FAMOUNT_LC) FROM #XiaoShouChengBenJinE jjj WHERE t1.FNUMBER=jjj.FNUMBER AND jjj.FAPPROVEDATE2=t1.FAPPROVEDATE2 AND t1.FCUSTOMERID=jjj.FCUSTOMERID AND fname='制造费用'),0)-
|
|
ISNULL((SELECT SUM(jjj.FAMOUNT_LC) FROM #TuiHuoChengBenJinE jjj WHERE t1.FNUMBER=jjj.FNUMBER AND jjj.FAPPROVEDATE2=t1.FAPPROVEDATE2 AND t1.FCUSTOMERID=jjj.FRETCUSTID AND fname='制造费用' ),0)) AS [实际成本(费)-总]
|
|
INTO #TempResultTable
|
|
FROM
|
|
(SELECT DISTINCT t1.FCustomerID,t1.FNUMBER,t1.FAPPROVEDATE2 ,t1.CustomerName ,t1.CustomerCode,t1.groupID FROM
|
|
#XiaoShouChengBenShuLiang t1
|
|
UNION
|
|
SELECT DISTINCT bb.FRETCUSTID,bb.FNUMBER,bb.FAPPROVEDATE2 ,bb.CustomerName, bb.CustomerCode,bb.groupID
|
|
FROM #TuiHuoChengBenShuLiang bb )t1
|
|
INNER JOIN VHUB_BD_BMMaterialGroup t5 ON t5.FNUMBER= t1.FNUMBER
|
|
LEFT JOIN VHUB_T_BMGStandCost cost ON cost.FDATE= FAPPROVEDATE2 AND cost.FBMMATERIALGROUP= t5.FID
|
|
GROUP BY t1.FCustomerID,t1.FNUMBER,t1.FAPPROVEDATE2 ,t1.CustomerName ,t1.CustomerCode,t1.groupID
|
|
|
|
SELECT [客户编码],[客户名称],[预算物料组],FCUSTOMERID,([销售数量]-[退货数量]) AS [销售数量]
|
|
,[预算总成本]=([预算销售数量]*[预算总成本单价]),[预算成本(料)-总]=([预算销售数量]*[预算成本_材料单价]),[预算成本(工)-总]=([预算销售数量]*[预算成本_人工单价])
|
|
,[预算成本(费)-总]=([预算销售数量]*[预算成本_制费单价]),([预算销售数量]) AS [预算销售数量]
|
|
,[实际销售总成本]=([销售成本金额]-[退货成本金额]),[实际成本(料)-总]=([实际成本(料)-总]),[实际成本(工)-总]=([实际成本(工)-总]),[实际成本(费)-总]=([实际成本(费)-总])
|
|
,([预算总成本单价]) AS [预算总成本单价],([预算成本_材料单价]) AS [预算成本_材料单价],([预算成本_人工单价]) AS [预算成本_人工单价],([预算成本_制费单价]) AS [预算成本_制费单价]
|
|
INTO #TempResultTable2
|
|
FROM
|
|
#TempResultTable
|
|
ORDER BY [预算物料组]
|
|
|
|
|
|
|
|
SELECT [客户编码] AS F_KeHuCode,[客户名称] AS F_KeHuName, [预算物料组] AS F_WuLiaoFenZu,FCUSTOMERID,[预算销售数量] AS F_YuSuanShuLiang,[销售数量] AS F_ShiJiXiaoShouShuLiang
|
|
,[预算与实际数量差异] AS F_YSYSJSLCY,a.预算总成本 AS F_YSZCB,实际销售总成本 AS F_SJZCB,a.预算与实际总成本差异 AS F_YSYSJZCBCY,[预算成本(料)-总] AS F_YSZCB_Z
|
|
,[实际成本(料)-总] AS F_SJCB_L_Z,[差异-总料] AS F_CHaYi_Z,[预算成本(工)-总] AS F_YSCB_G_Z,[实际成本(工)-总] AS F_SJCB_G_Z,[差异-总工] AS F_ChaYi_ZG,[预算成本(费)-总] AS F_YSCB_F_Z
|
|
,[实际成本(费)-总] AS F_SJCB_F_Z,[差异-总费] AS F_ChaYi_ZF,[单位总预算成本] AS F_DWZYSCB,[单位实际总成本] AS F_DWSJZCB
|
|
,F_DWCBCY=[单位总预算成本]-[单位实际总成本],[预算成本(料)-单] AS F_YSCB_L_D,[实际成本(料)-单] AS F_SJCB_L_D
|
|
--,[差异-单料] AS F_ChaYi_DanLiao,
|
|
,[实际成本(料)-总] F_SJCB_L_Z, [差异-总料] AS F_CHaYi_Z,[预算成本(工)-总] AS F_YSCB_G_Z,[实际成本(工)-总] AS F_SJCB_G_Z
|
|
,[差异-总工] AS F_ChaYi_ZG,[预算成本(费)-总] AS F_YSCB_F_Z,[实际成本(费)-总] AS F_SJCB_F_Z,[差异-总费] AS F_ChaYi_ZF,[单位总预算成本] AS F_DWZYSCB
|
|
,[单位实际总成本] AS F_DWSJZCB, [预算成本(工)-单] AS F_YSCB_G_D,[实际成本(工)-单] AS F_SJCB_G_D,[预算成本(费)-单] AS F_YSCB_F_D,[实际成本(费)-单] AS F_SJCB_F_D
|
|
|
|
,[F_ChaYi_DanLiao]=[预算成本(料)-单]-[实际成本(料)-单],F_ChaYi_D_G=[预算成本(工)-单]-[实际成本(工)-单],F_ChaYi_F_D=[预算成本(费)-单]-[实际成本(费)-单]
|
|
FROM (
|
|
SELECT [预算与实际数量差异]=[预算销售数量]-[销售数量],[预算与实际总成本差异]=[预算总成本]-[实际销售总成本]
|
|
,[差异-总料]=[预算成本(料)-总]-[实际成本(料)-总] ,[差异-总工]=[预算成本(工)-总]-[实际成本(工)-总],[差异-总费]=[预算成本(费)-总]-[实际成本(费)-总]
|
|
,[单位总预算成本]=CASE WHEN [预算销售数量]!=0 THEN [预算总成本]/[预算销售数量] ELSE 0 END
|
|
,[预算成本(料)-单]=CASE WHEN [预算销售数量]!=0 THEN [预算成本(料)-总]/[预算销售数量] ELSE 0 END
|
|
,[预算成本(工)-单]=CASE WHEN [预算销售数量]!=0 THEN [预算成本(工)-总]/[预算销售数量] ELSE 0 END
|
|
,[预算成本(费)-单]=CASE WHEN [预算销售数量]!=0 THEN [预算成本(费)-总]/[预算销售数量] ELSE 0 END
|
|
,[单位实际总成本]=CASE WHEN [销售数量]!=0 THEN [实际销售总成本]/[销售数量] ELSE 0 END
|
|
,[实际成本(料)-单]=CASE WHEN [销售数量]!=0 THEN [实际成本(料)-总]/[销售数量] ELSE 0 END
|
|
,[实际成本(工)-单]=CASE WHEN [销售数量]!=0 THEN [实际成本(工)-总]/[销售数量] ELSE 0 END
|
|
,[实际成本(费)-单]=CASE WHEN [销售数量]!=0 THEN [实际成本(费)-总]/[销售数量] ELSE 0 END
|
|
,*
|
|
FROM #TempResultTable2) a
|
|
|
|
|
|
DROP TABLE #XiaoShouChengBenShuLiang
|
|
DROP TABLE #TuiHuoChengBenShuLiang
|
|
DROP TABLE #XiaoShouChengBenJinE
|
|
DROP TABLE #TuiHuoChengBenJinE
|
|
DROP TABLE #xiaoshouTable
|
|
DROP TABLE #tuihuoTable
|
|
|
|
|
|
DROP TABLE #TempNianDuXiaoShouYuSuan
|
|
DROP TABLE #TempResultTable
|
|
DROP TABLE #TempResultTable2
|
|
|
|
|
|
END
|
|
|