22
This commit is contained in:
parent
20c69e3d91
commit
b9e5ca1cc1
148
6.预算销售与实际销售对比分析报表.sql
Normal file
148
6.预算销售与实际销售对比分析报表.sql
Normal file
@ -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
|
@ -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
|
|
||||||
|
|
||||||
|
|
||||||
|
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 T1.FCUSTOMERID,t1.FDOCUMENTSTATUS
|
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
|
, 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
|
,(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'
|
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_SAL_OUTSTOCKENTRY T2 ON T1.FID = T2.FID
|
||||||
INNER JOIN T_BD_MATERIAL matal2 ON T2.FMATERIALID = matal2.FMATERIALID
|
INNER JOIN T_BD_MATERIAL matal2 ON T2.FMATERIALID = matal2.FMATERIALID
|
||||||
INNER JOIN VHUB_T_BMMGroupLinkTable cc ON matal2.FMATERIALGROUP = cc.[FMATERIALGROUP]
|
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'
|
WHERE T1.FAPPROVEDATE>='2025-05-01' AND t1.FAPPROVEDATE<'2025-06-01'
|
||||||
GROUP BY T1.FCUSTOMERID
|
GROUP BY T1.FCUSTOMERID, cc.[FBMMATERIALGROUP],t1.FDOCUMENTSTATUS, t3.FNUMBER ,
|
||||||
, cc.[FBMMATERIALGROUP],t1.FDOCUMENTSTATUS
|
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.*
|
--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
|
--from T_SAL_OUTSTOCK T1 inner join T_SAL_OUTSTOCKENTRY T2
|
||||||
--inner join T_SAL_OUTSTOCKENTRY_C T3 on T3.FENTRYID = T2.FENTRYID
|
--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
|
-- left join T_BD_MATERIAL ff on t2.FMaterialID=ff.FMaterialID
|
||||||
-- WHERE T1.FAPPROVEDATE>='2025-05-01' AND t1.FAPPROVEDATE<'2025-06-01'
|
-- WHERE T1.FAPPROVEDATE>='2025-05-01' AND t1.FAPPROVEDATE<'2025-06-01'
|
||||||
--order by T2.FENTRYID desc
|
--order by T2.FENTRYID desc
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user