141 lines
3.8 KiB
PL/PgSQL
141 lines
3.8 KiB
PL/PgSQL
DECLARE @period int
|
|
declare @dbName varchar(100)
|
|
|
|
|
|
SET @period = 201801
|
|
select @dbName = DB_NAME()
|
|
if @dbName != 'AIS20231110222743'
|
|
BEGIN
|
|
SET @period = 202406
|
|
END
|
|
|
|
IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#生产订单') IS NOT NULL)
|
|
BEGIN
|
|
DROP TABLE #生产订单
|
|
END
|
|
|
|
IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#数据整合') IS NOT NULL)
|
|
BEGIN
|
|
DROP TABLE #数据整合
|
|
END
|
|
|
|
CREATE TABLE #数据整合 (
|
|
MOBILLNO NVARCHAR(255) NOT NULL
|
|
,PMOBILLNO NVARCHAR(255) NOT NULL
|
|
,直接材料 DECIMAL(23,10) NOT NULL
|
|
,FPRODUCTDIMEID INT NOT NULL
|
|
,ALEVEL INT NOT NULL
|
|
,PLEVEL INT NOT NULL
|
|
,BILLID INT NOT NULL
|
|
,BILLENTRYID INT NOT NULL
|
|
,FPRODUCTID INT NOT NULL
|
|
,FMATERIALID INT NOT NULL
|
|
,LOT_TEXT VARCHAR(255) NULL
|
|
,FPERIOD INT NOT NULL
|
|
,APATH VARCHAR(1000) NULL
|
|
,PPATH VARCHAR(1000) NULL
|
|
,MPATH VARCHAR(8000) NULL
|
|
)
|
|
|
|
INSERT INTO #数据整合
|
|
SELECT t0.FBILLNO
|
|
,''
|
|
,0
|
|
,t1.FPRODUCTDIMEID
|
|
,1
|
|
,0
|
|
,t1.FBILLID
|
|
,t1.FBILLENTRYID
|
|
,t1.FPRODUCTID
|
|
,t0e.FMATERIALID
|
|
,t0.FBILLNO
|
|
,t5.FPERIOD
|
|
,CONVERT(varchar(1000),ROW_NUMBER() OVER (ORDER BY t0e.FID,t0e.FENTRYID,t0e.FMATERIALID)) AS 'aPATH'
|
|
,CONVERT(varchar(1000),'0') AS 'PPATH'
|
|
,CONVERT(VARCHAR(8000),'') AS 'MPath'
|
|
FROM T_PRD_MO t0
|
|
INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID
|
|
INNER jOIN T_CB_PROORDERDIME t1 on t1.FBILLID = t0e.FID AND t1.FBILLENTRYID = t0e.FENTRYID
|
|
INNER JOIN V_CB_PROORDERINFO t2 on t2.FPRODUCTDIMEID = t1.FPRODUCTDIMEID
|
|
CROSS APPLY(
|
|
SELECT TOP 1 1 AS 'val',t5.FYEAR *100 + t5.FPERIOD AS 'FPERIOD'
|
|
FROM V_HS_OUTACCTG t5
|
|
WHERE t5.FID = t2.FACCTGID
|
|
AND t5.FYEAR *100 + t5.FPERIOD <= @period
|
|
ORDER BY t5.FYEAR *100 + t5.FPERIOD DESC
|
|
) t5
|
|
WHERE 1 = 1
|
|
--AND t0.FBILLNO = 'WO2403210039'
|
|
AND t1.FFORMID = 'PRD_MO'
|
|
--AND (CONVERT(INT,CONVERT(varchar(6),t0.FDATE,112))) = @period
|
|
|
|
DECLARE @num INT,@level int,@LoopCount int
|
|
SET @num = 1
|
|
SET @level =1
|
|
SET @LoopCount = 0;
|
|
WHILE (@num <> 0 AND @LoopCount < 30)
|
|
BEGIN
|
|
;WITH #查询数据 AS (
|
|
SELECT t0.FPRODUCTNO
|
|
,t0.FPRODUCTID
|
|
,t0.FBILLID
|
|
,t0.FBILLENTRYID
|
|
,SUM(t1.FAMOUNT) AS '领料成本'
|
|
,SUM(t1.FQTY) AS '领料数量'
|
|
,t2.FMATERIALID
|
|
,ISNULL(t4.FNUMBER,'') 'FLOT_TEXT'
|
|
,SUM(t1m.FQUALIFIEDINAMOUNT) '本期完工金额'
|
|
,SUM(t1m.FQUALIFIEDINQTY) '本期完工数量'
|
|
,t5.FPERIOD
|
|
FROM T_CB_PROORDERDIME t0
|
|
INNER JOIN V_CB_PROORDERINFO t0e on t0e.FPRODUCTDIMEID = t0.FPRODUCTDIMEID
|
|
INNER JOIN V_CB_COSTALLORESULTSEND t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID
|
|
INNER JOIN V_CB_COSTMATTERIAL t1m on t1m.FID = t0e.FID
|
|
INNER JOIN T_HS_INIVSTOCKDIMENSION t2 on t2.FENTRYID = t1.FDIMEENTRYID AND t1m.FMATERIALID = t2.FMATERIALID
|
|
INNER JOIN V_HS_OUTINSTOCKSEQ t3 on t3.FENTRYID = t1.FOUTINSTOCKID
|
|
LEFT JOIN T_BD_LOTMASTER t4 on t4.FLOTID = t2.FLOT
|
|
CROSS APPLY(
|
|
SELECT TOP 1 1 AS 'val',(t5.FYEAR * 100 + t5.FPERIOD) AS 'FPERIOD'
|
|
FROM V_HS_OUTACCTG t5
|
|
WHERE t5.FID = t0e.FACCTGID
|
|
AND t5.FYEAR *100 + t5.FPERIOD <= 202407
|
|
ORDER BY t5.FYEAR *100 + t5.FPERIOD DESC
|
|
) t5
|
|
WHERE t0.FPRODUCTNO IN (
|
|
SELECT DISTINCT tt.LOT_TEXT FROM #数据整合 tt
|
|
WHERE 1=1
|
|
AND tt.ALEVEL = @level
|
|
AND tt.LOT_TEXT != '')
|
|
GROUP BY t0.FPRODUCTNO
|
|
,t0.FPRODUCTID
|
|
,t0.FBILLID
|
|
,t0.FBILLENTRYID
|
|
,t2.FMATERIALID
|
|
,t4.FNUMBER
|
|
,t5.FPERIOD
|
|
)
|
|
INSERT INTO #数据整合
|
|
SELECT t0.FPRODUCTNO
|
|
,t1.MOBILLNO
|
|
,CONVERT(decimal(23,10),t0.本期完工金额)
|
|
,t1.FPRODUCTDIMEID
|
|
,@level
|
|
,@level - 1
|
|
,t0.FBILLID
|
|
,t0.FBILLENTRYID
|
|
,t0.FPRODUCTID
|
|
,t0.FMATERIALID
|
|
,t0.FLOT_TEXT
|
|
,t0.FPERIOD
|
|
,CONVERT(varchar(1000),CONCAT(t1.APATH,'.',ROW_NUMBER() OVER (PARTITION BY t0.FBILLID,t0.FBILLENTRYID ORDER BY t0.FMATERIALID))) AS 'aPATH'
|
|
,t1.APATH
|
|
,CONVERT(varchar(8000),CONCAT(t1.MPath,ISNULL(t1.MoBillNo,''),'>'))
|
|
FROM #查询数据 t0
|
|
INNER JOIN #数据整合 t1 on t0.FPRODUCTNO = t1.LOT_TEXT AND t1.LOT_TEXT != ''
|
|
|
|
SET @num = @@ROWCOUNT
|
|
SET @level += 1
|
|
SET @LoopCount += 1
|
|
END
|
|
|
|
SELECT * FROM #数据整合 |