Files
GateDge2023_ljy/07.珠海英搏尔/Enpower.Python/批量查询.sql

141 lines
3.8 KiB
MySQL
Raw Normal View History

2024-08-29 09:42:49 +08:00
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..#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>') IS NOT NULL)
BEGIN
DROP TABLE #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
END
IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>') IS NOT NULL)
BEGIN
DROP TABLE #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
END
CREATE TABLE #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (
MOBILLNO NVARCHAR(255) NOT NULL
,PMOBILLNO NVARCHAR(255) NOT NULL
,ֱ<EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD> 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 #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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 #<23><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> AS (
SELECT t0.FPRODUCTNO
,t0.FPRODUCTID
,t0.FBILLID
,t0.FBILLENTRYID
,SUM(t1.FAMOUNT) AS '<EFBFBD><EFBFBD><EFBFBD>ϳɱ<EFBFBD>'
,SUM(t1.FQTY) AS '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t2.FMATERIALID
,ISNULL(t4.FNUMBER,'') 'FLOT_TEXT'
,SUM(t1m.FQUALIFIEDINAMOUNT) '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,SUM(t1m.FQUALIFIEDINQTY) '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,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 #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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 #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SELECT t0.FPRODUCTNO
,t1.MOBILLNO
,CONVERT(decimal(23,10),t0.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
,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 #<23><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> t0
INNER JOIN #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> t1 on t0.FPRODUCTNO = t1.LOT_TEXT AND t1.LOT_TEXT != ''
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
END
SELECT * FROM #<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>