with cte_date(dDate) as
(
select CAST('2022-09-30' AS datetime)
union all
select dateadd(month, 1, dDate)
from cte_date
where convert(varchar(6),dDate,120) < convert(varchar(6),GETDATE(),120)
)
, cte0 as
(
select convert(varchar(7), dDate, 120) as dDate
from cte_date
)
, cte1 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), r1.FSTOCKINDATE, 120) 日期 ,r1.FQTY 初始数量--,0 生产入库数量,0 采购入库,0 销售出库数量,0 销售退货
from T_BD_MATERIAL t1
left join T_BD_MATERIAL_L t2 on t1.FMATERIALID=t2.FMATERIALID
left join T_STK_INVINITDETAIL r1 on r1.FMATERIALID=t1.FMATERIALID
where r1.FSTOCKINDATE is not null and t1.FNUMBER ='401001010131-0001'
)
,cte2 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate, 120) 日期 ,t3.FREALQTY 生产入库数量--,0 初始数量,0 采购入库,0 销售出库数量,0 销售退货
from T_BD_MATERIAL t1
left join T_BD_MATERIAL_L t2 on t1.FMATERIALID=t2.FMATERIALID
left join T_PRD_INSTOCKENTRY t3 on t3.FMATERIALID=t1.FMATERIALID
left join T_PRD_INSTOCK t4 on t4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte3 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate,120 ) 日期,t3.FREALQTY 采购入库--,0 初始数量,0 生产入库数量,0 销售出库数量,0 销售退货
from T_BD_MATERIAL t1
left join T_BD_MATERIAL_L t2 on t1.FMATERIALID=t2.FMATERIALID
left join T_STK_INSTOCKENTRY t3 on t3.FMATERIALID=t1.FMATERIALID
left join T_STK_INSTOCK t4 on t4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte4 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate, 120) 日期,t3.FREALQTY 销售出库数量--,0 初始数量,0 生产入库数量,0 采购入库,0 销售退货
FROM T_BD_MATERIAL t1
left join T_BD_MATERIAL_L t2 ON T2.FMATERIALID=t1.FMATERIALID
LEFT JOIN T_SAL_OUTSTOCKENTRY t3 ON t1.FMATERIALID=t3.FMATERIALID
LEFT JOIN T_SAL_OUTSTOCK t4 ON T4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte5 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate, 120) 日期,t3.FREALQTY 销售退货--,0 初始数量,0 生产入库数量,0 采购入库,0 销售出库数量
FROM T_BD_MATERIAL T1
left join T_BD_MATERIAL_L t2 ON T2.FMATERIALID=t1.FMATERIALID
LEFT JOIN T_SAL_RETURNSTOCKENTRY t3 ON t1.FMATERIALID=t3.FMATERIALID
LEFT JOIN T_SAL_RETURNSTOCK t4 ON T4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte6 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate, 120) 日期,t3.FQTY 其他入库数量--,0 初始数量,0 生产入库数量,0 采购入库,0 销售出库数量
FROM T_BD_MATERIAL T1
left join T_BD_MATERIAL_L t2 ON T2.FMATERIALID=t1.FMATERIALID
LEFT JOIN T_STK_MISCELLANEOUSENTRY t3 ON t1.FMATERIALID=t3.FMATERIALID
LEFT JOIN T_STK_MISCELLANEOUS t4 ON T4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte7 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate, 120) 日期,t3.FQTY 其他出库数量--,0 初始数量,0 生产入库数量,0 采购入库,0 销售出库数量
FROM T_BD_MATERIAL T1
left join T_BD_MATERIAL_L t2 ON T2.FMATERIALID=t1.FMATERIALID
LEFT JOIN T_STK_MISDELIVERYENTRY t3 ON t1.FMATERIALID=t3.FMATERIALID
LEFT JOIN T_STK_MISDELIVERY t4 ON T4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte8 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate, 120) 日期,t3.FGAINQty 盘盈数量--,0 初始数量,0 生产入库数量,0 采购入库,0 销售出库数量
FROM T_BD_MATERIAL T1
left join T_BD_MATERIAL_L t2 ON T2.FMATERIALID=t1.FMATERIALID
LEFT JOIN T_STK_STKCOUNTGAINENTRY t3 ON t1.FMATERIALID=t3.FMATERIALID
LEFT JOIN T_STK_STKCOUNTGAIN t4 ON T4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte9 as
(
select
t1.FNUMBER 编号,t2.FNAME 名称 ,convert(varchar(7), t4.FDate, 120) 日期,t3.FLOSSQty 盘亏数量--,0 初始数量,0 生产入库数量,0 采购入库,0 销售出库数量
FROM T_BD_MATERIAL T1
left join T_BD_MATERIAL_L t2 ON T2.FMATERIALID=t1.FMATERIALID
LEFT JOIN T_STK_STKCOUNTLOSSENTRY t3 ON t1.FMATERIALID=t3.FMATERIALID
LEFT JOIN T_STK_STKCOUNTLOSS t4 ON T4.FID=t3.FID
where t4.FDate is not null and t1.FNUMBER ='401001010131-0001'
)
,cte10 as
(
select cte0.dDate,t1.编号,t1.名称 from cte0
left join
(
select 编号,名称 from cte1
union
select 编号,名称 from cte2
union
select 编号,名称 from cte3
union
select 编号,名称 from cte4
union
select 编号,名称 from cte5
union
select 编号,名称 from cte6
union
select 编号,名称 from cte7
union
select 编号,名称 from cte8
union
select 编号,名称 from cte9
) t1 on 1=1
)
select cte10.dDate,cte6.编号,cte6.名称,cte1.初始数量,cte2.生产入库数量,cte3.采购入库,cte4.销售出库数量,cte5.销售退货,cte6.其他入库数量,cte7.其他出库数量,cte8.盘盈数量,cte9.盘亏数量
from cte10
left join cte1 on cte1.日期=cte10.dDate and cte1.编号=cte10.编号
left join cte2 on cte2.日期=cte10.dDate and cte2.编号=cte10.编号
left join cte3 on cte3.日期=cte10.dDate and cte3.编号=cte10.编号
left join cte4 on cte4.日期=cte10.dDate and cte4.编号=cte10.编号
left join cte5 on cte5.日期=cte10.dDate and cte5.编号=cte10.编号
left join cte6 on cte6.日期=cte10.dDate and cte6.编号=cte10.编号
left join cte7 on cte7.日期=cte10.dDate and cte7.编号=cte10.编号
left join cte8 on cte8.日期=cte10.dDate and cte8.编号=cte10.编号
left join cte9 on cte9.日期=cte10.dDate and cte9.编号=cte10.编号
这是谁写的代码,10层cte拉出去开除吧,光看你代码我是不能看出来有什么逻辑可言,你起码得介绍下原表数据
通过 SQL 的GRANT 语句和REVOKE 语句实现
定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些操作