Files
GateDge2023_ljy/07.珠海英搏尔/Enpower/PRD_MO/SQLserver/生产订单BOM_查询.sql

219 lines
6.6 KiB
MySQL
Raw Normal View History

2024-03-28 11:30:14 +08:00
CREATE TABLE #TMP_MO --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
(
FID INT
,FBILLNO VARCHAR(255)
,FDATE DATE
,FENTRYID INT
,FMATERIALID INT
,OMATERAILID int
,MOBOMID INT
,FSRCFORMID VARCHAR(255)
,FSRCBILLNO VARCHAR(255)
,FSRCINTERID INT
,FSRCENTRYID INT
,FSEQ INT
,FBOMID INT
,BOMLEVEL VARCHAR(255)
,TOPBILLNO VARCHAR(255)
,FFORECASTGROUP varchar(255)
);
CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
--INSERT INTO #TMP_MO
/*<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ͷ<EFBFBD>ţ<EFBFBD>T_PLN_RESERVELINKENTRY<EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
SELECT
t0e.FID
,t0.FBILLNO
,t0.FDATE
,t0e.FENTRYID
,t0e.FMATERIALID
,t0e.FBomId MOBomId
,t1.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,t1.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,t2e.FSEQ
,t2e.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,t2e.FMATERIALID OMATERAILID
,t0e.FFORECASTGROUP
,t0e.FFORECASTGROUPFRIST
--,t0_lk.FSTABLENAME
--,t0_lk.FSTABLEID
--,t0_lk.FSBILLID
,t0_lk.FSID
,t0e_Q.FSRCSPLITID
,'' BOMLevel
INTO #TMP_MO_PART
FROM T_PRD_MO t0 --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WHERE 1 = 1
--t0.FBILLNO='WO2401100002' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
AND t0e.FFORECASTGROUP = '' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>*/
--AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>MRP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶĵ<EFBFBD><EFBFBD><EFBFBD>*/
AND t0e_Q.FSRCSPLITID = 0
INSERT INTO #TMP_MO
SELECT
tt.FID
,tt.FBILLNO
,tt.FDATE
,tt.FENTRYID
,tt.FMATERIALID
,tt.OMATERAILID
,tt.MOBomId
,tt.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,tt.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,tt.FSEQ
,tt.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,tt.BOMLevel
,ISNULL(t0.FBILLNO,'<EFBFBD>޶<EFBFBD><EFBFBD><EFBFBD>') FBILLNO
,tt.FFORECASTGROUP
--into #TMP_MO
FROM
#TMP_MO_PART tt
LEFT JOIN (
SELECT
FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
FROM
#TMP_MO_PART
WHERE FMATERIALID = OMATERAILID
) t0 ON 1=1
AND tt.FBOMID = t0.FBOMID
AND tt.FSEQ = t0.FSEQ
AND tt.FSRCINTERID = t0.FSRCINTERID
AND tt.FSRCENTRYID = t0.FSRCENTRYID
AND tt.FDATE = t0.FDATE
--AND t0.ROWID =1
AND tt.OMATERAILID = t0.FMATERIALID
AND t0.Billnolen = len(tt.FBILLNO)
--AND tt.fsid = t0.FSID
WHERE 1 = 1
--AND tt.FFORECASTGROUP = ''
CREATE TABLE #TMP_TOP_BOM_SET(
FID int
,FNUMBER varchar(80)
,FMATERIALID int
,FSEQ int
,BOMLEVEL int
,TOPID int
,showlevel varchar(80)
,oId int
)
CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
,1 'BOMLEVEL'
,t0.FID AS 'TOPID'
,''
,t0.FID
FROM
T_ENG_BOM t0
INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
WHERE 1 = 1
AND t3.FMATERIALID = t3.OMATERAILID
GROUP BY
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
DECLARE @num INT,@level int,@LoopCount int
SET @num = 1
SET @level =1
SET @LoopCount = 0;
WHILE (@num <> 0 AND @LoopCount < 30)
BEGIN
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t3.FID
,t3.FNUMBER
,t3.FMATERIALID
,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
,t0.BOMLEVEL + 1
,t0.TOPID
,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
,t0.FID
FROM
#TMP_TOP_BOM_SET t0
INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
WHERE 1 = 1
AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
AND t0.BOMLEVEL = @level
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
END
SELECT
*
INTO #TMP_TOP_BOM_GROUP
FROM #TMP_TOP_BOM_SET
WHERE 1 = 1
GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
INTO #TMP_MO_GROUP
FROM #TMP_MO
GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE t0 SET t0.BOMLEVEL = (CASE t0.TOPBILLNO WHEN '<EFBFBD>޶<EFBFBD><EFBFBD><EFBFBD>' THEN '' ELSE ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'') END)
FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
----<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
--UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
--FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
--WHERE t0e.FFORECASTGROUP = ''
--SELECT t0.*,t1.fnumber
--FROM #TMP_TOP_BOM_GROUP t0
--INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
----WHERE t0.TOPID = 8062230
--order by t0.FSEQ,t0.BOMLEVEL
--SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'<27><>
SELECT t0.*
,t0_lk.FSTABLENAME
,t0_lk.FSTABLEID
,t0_lk.FSBILLID
,t0_lk.FSID
,t0e_Q.FSRCSPLITBILLNO
,t0e_Q.FSRCSPLITID
,t0e_Q.FSRCSPLITSEQ
,t0e_Q.FSRCSPLITENTRYID
--INTO #TMP_MO_PART
FROM #TMP_MO_GROUP t0
LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
WHERE 1 = 1
--AND FBOMID =8237478 AND MOBOMID =8237478
--AND topbillno='WO2311080183'
--SELECT * FROM #TMP_MO WHERE 1 = 1
--AND FBOMID <> MOBOMID
--AND FBOMID = 6339745 --AND topbillno='WO2308090009' --<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DROP TABLE #TMP_MO_GROUP
DROP TABLE #TMP_MO_PART
DROP TABLE #TMP_TOP_BOM_SET
DROP TABLE #TMP_TOP_BOM_GROUP
DROP TABLE #TMP_MO --ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP