a
This commit is contained in:
186
07.珠海英搏尔/SQLQuery2.sql
Normal file
186
07.珠海英搏尔/SQLQuery2.sql
Normal file
@@ -0,0 +1,186 @@
|
||||
USE [MESAPI_V2]
|
||||
GO
|
||||
/****** Object: StoredProcedure [dbo].[rb_GetMergePPBOMKeyMartQty] Script Date: 2024/9/23 15:53:03 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- =============================================
|
||||
-- Author: <<3C>ֱȣ<D6B1>XPS>
|
||||
-- Create date: <20230130>
|
||||
-- Last date: <20230915>
|
||||
-- Description: <<3C>û<EFBFBD>ȡ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嵥<EFBFBD><E5B5A5>ͬ<EFBFBD><CDAC><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>>
|
||||
-- =============================================
|
||||
ALTER PROCEDURE [dbo].[rb_GetMergePPBOMKeyMartQty]
|
||||
@MO varchar(255),@MOSeq INT,@allmart bit=1,@OrgID INT=1
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
BEGIN TRY
|
||||
BEGIN TRAN
|
||||
/*-----------------------------------------------------------------------------------------------------------------------*/
|
||||
CREATE TABLE #MATERGROUP(
|
||||
INDEXID INT IDENTITY(1,1)
|
||||
,FID INT
|
||||
,FENTRYID INT PRIMARY KEY
|
||||
,FSEQ INT
|
||||
,FMATERIALID INT
|
||||
,FQTY DECIMAL(38,10)
|
||||
,FBASEQTY DECIMAL(38,10)
|
||||
,FNUMERATOR INT DEFAULT 1
|
||||
,FDENOMINATOR INT DEFAULT 1
|
||||
,FPOSITIONNO NVARCHAR(4000)
|
||||
)
|
||||
|
||||
INSERT INTO #matergroup(FID,FENTRYID,FMATERIALID,FSeq,FQTY,FBaseQTY,FPositionNO)
|
||||
SELECT t1.FID,t1.FENTRYID,FMATERIALID,FSEQ,FMUSTQTY,FBASEMUSTQTY,FPositionNO
|
||||
FROM T_PRD_PPBOMENTRY t1
|
||||
INNER JOIN T_PRD_PPBOMENTRY_C tc ON tc.FID = t1.FID AND tc.FENTRYID = t1.FENTRYID AND tc.FSUPPLYORG= @OrgID
|
||||
WHERE t1.FMOBILLNO = @MO AND FMOENTRYSEQ = @MOSeq AND FMATERIALTYPE = 1
|
||||
AND FMUSTQTY > CASE @allmart WHEN 0 THEN -1 ELSE 0 END
|
||||
AND T1.FMATERIALID IN (
|
||||
SELECT FMATERIALID FROM T_PRD_PPBOMENTRY
|
||||
WHERE FID=t1.FID AND FMATERIALTYPE = 1
|
||||
AND FMUSTQTY > CASE @allmart WHEN 0 THEN -1 ELSE 0 END
|
||||
GROUP BY FMATERIALID
|
||||
HAVING COUNT(1) > 1
|
||||
)
|
||||
--SELECT * FROM #matergroup
|
||||
/*-----------------------------------------------------------------------------------------------------------------------*/
|
||||
IF EXISTS(SELECT 1 FROM #matergroup)
|
||||
BEGIN
|
||||
/*-----------------------------------------------------------------------------------------------------------------------*/
|
||||
--/*<EFBFBD><EFBFBD><EFBFBD>Ⱥϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
--create table #group (FMATERIALID int,FEntryID INT primary key)
|
||||
--insert into #group
|
||||
--SELECT p.FMATERIALID,p.FENTRYID FROM #matergroup g INNER JOIN T_PRD_PPBOMENTRY p ON P.FID=G.FID AND P.FENTRYID=G.FENTRYID
|
||||
--WHERE p.FREPLACEGROUP in(
|
||||
-- SELECT FREPLACEGROUP FROM T_PRD_PPBOMENTRY WHERE FMOBILLNO=@MO and FMOENTRYSEQ=@MOSeq GROUP BY FREPLACEGROUP HAVING count(*)>1
|
||||
--)
|
||||
--UPDATE M SET FQTY=(SELECT ROUND(SUM(ISNULL(FQTY,0)),U.FPrecision) FROM #matergroup q INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID=q.FMATERIALID
|
||||
-- INNER JOIN T_BD_UNIT u ON u.FUNITID=s.FStoreUnitID GROUP BY s.FMATERIALID,U.FPrecision HAVING s.FMATERIALID=M.FMATERIALID)
|
||||
-- ,FBaseQTY=(SELECT ROUND(SUM(ISNULL(FBaseQTY,0)),U.FPrecision) FROM #matergroup q INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID=q.FMATERIALID
|
||||
-- INNER JOIN T_BD_UNIT u ON u.FUNITID=s.FStoreUnitID GROUP BY s.FMATERIALID,U.FPrecision HAVING s.FMATERIALID=M.FMATERIALID)
|
||||
--FROM #matergroup M INNER JOIN #group g ON m.FENTRYID=g.FEntryID
|
||||
--WHERE g.FEntryID in(SELECT MIN(FEntryID) FEntryID FROM #group GROUP BY FMATERIALID)
|
||||
|
||||
UPDATE M SET FQTY=(
|
||||
SELECT ROUND(SUM(ISNULL(FQTY,0)),U.FPrecision)
|
||||
FROM #matergroup q
|
||||
INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID = q.FMATERIALID
|
||||
INNER JOIN T_BD_UNIT u ON u.FUNITID = s.FStoreUnitID
|
||||
GROUP BY s.FMATERIALID,U.FPrecision
|
||||
HAVING s.FMATERIALID=M.FMATERIALID),FBaseQTY = (
|
||||
SELECT ROUND(SUM(ISNULL(FBaseQTY,0)),U.FPrecision)
|
||||
FROM #matergroup q
|
||||
INNER JOIN T_BD_MATERIALSTOCK s ON s.FMATERIALID=q.FMATERIALID
|
||||
INNER JOIN T_BD_UNIT u ON u.FUNITID=s.FStoreUnitID
|
||||
GROUP BY s.FMATERIALID,U.FPrecision
|
||||
HAVING s.FMATERIALID=M.FMATERIALID
|
||||
)
|
||||
FROM #matergroup M
|
||||
WHERE FSEQ in(
|
||||
SELECT MIN(FSEQ) FSEQ
|
||||
FROM #matergroup
|
||||
GROUP BY FMATERIALID
|
||||
)
|
||||
--and not exists(
|
||||
-- SELECT FENTRYID FROM #group WHERE FENTRYID=m.FENTRYID
|
||||
--)
|
||||
|
||||
UPDATE M SET FQTY=0,FBaseQTY=0
|
||||
FROM #matergroup M
|
||||
WHERE FSEQ not in(
|
||||
SELECT MIN(FSEQ) FSEQ FROM #matergroup GROUP BY FMATERIALID
|
||||
)
|
||||
--and FENTRYID NOT IN(
|
||||
-- SELECT MIN(FENTRYID) FENTRYID FROM #group WHERE FMATERIALID=M.FMATERIALID GROUP BY FMATERIALID
|
||||
--)
|
||||
/*-----------------------------------------------------------------------------------------------------------------------*/
|
||||
DECLARE @PQTY DECIMAL(38,10),@PBASEQTY DECIMAL(38,10)
|
||||
SELECT @PQTY=FQTY,@PBASEQTY=FBASEQTY FROM T_PRD_PPBOM WHERE FMOBILLNO=@MO and FMOENTRYSEQ=@MOSeq
|
||||
|
||||
DECLARE @i int=1,@j int
|
||||
SELECT @j=max(IndexID) FROM #matergroup
|
||||
while @i<=@j
|
||||
begin
|
||||
declare @molecule DECIMAL(38,10),@md decimal(38,10),@out_molecule int,@out_denominator int
|
||||
SELECT @molecule=FQTY FROM #matergroup WHERE IndexID=@i
|
||||
if @molecule>0 /*<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ĸ*/
|
||||
begin
|
||||
UPDATE #matergroup SET FNUMERATOR=ROUND(@molecule/@PQTY,4),FDENOMINATOR=1
|
||||
WHERE IndexID=@i
|
||||
end
|
||||
SET @i=@i + 1
|
||||
end
|
||||
--drop table #group
|
||||
/*-----------------------------------------------------------------------------------------------------------------------*/
|
||||
SELECT
|
||||
MP.FNUMBER FParentMaterial,bom.FNUMBER FBOMID,p2.FMoId,B.FMOBILLNO,B.FMOEntrySeq,b.FMOEntryID,p2.FBaseQty
|
||||
,y.FNUMBER FMOType,u2.FNUMBER FBaseUnitID,u3.FNUMBER FUnitID,p2.FParentOwnerTypeId
|
||||
,m2.FNUMBER FMaterialID2,FChangeType,u1.FNUMBER FUnitID2,A.FMUSTQTY,p2.FQTY FProduceQty
|
||||
,p2.FBILLNO FPPBOMNo,B.FID FPPBOMId,B.FENTRYID FPPBOMEntryId,B.FSeq FPPBOMEntrySeq
|
||||
,d1.FNUMBER FWORKSHOPID,g.FNUMBER FOWNERID,g.FNUMBER FSUPPLYORG,B.FReplaceGroup,A.FPositionNO
|
||||
FROM (
|
||||
SELECT '2' FChangeType,p1.FMUSTQTY FMustQty,p1.FID,p1.FENTRYID,FPositionNO
|
||||
FROM #matergroup m
|
||||
INNER JOIN T_PRD_PPBOMENTRY p1 ON p1.FID=m.FID and p1.FENTRYID=m.FENTRYID
|
||||
|
||||
union
|
||||
SELECT '3' FChangeType,m.FQTY FMustQty,p1.FID,p1.FENTRYID,CASE m.FQTY WHEN 0 THEN FPositionNO ELSE STUFF
|
||||
(
|
||||
(
|
||||
SELECT ','+FPositionNO
|
||||
FROM (SELECT DISTINCT FPositionNO,FMATERIALID FROM #matergroup m1 WHERE m1.FID=m.FID) B
|
||||
WHERE (FMATERIALID=m.FMATERIALID)
|
||||
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'
|
||||
),1,1,''
|
||||
) END AS FPositionNO
|
||||
FROM #matergroup m
|
||||
INNER JOIN T_PRD_PPBOMENTRY p1 ON p1.FID=m.FID and p1.FENTRYID=m.FENTRYID
|
||||
) A
|
||||
INNER JOIN T_PRD_PPBOMENTRY B ON B.FID=A.FID and B.FENTRYID=A.FENTRYID
|
||||
INNER JOIN T_BD_MATERIAL m2 ON m2.FMATERIALID=B.FMATERIALID
|
||||
INNER JOIN T_BD_UNIT u1 ON u1.FUNITID=B.FUNITID
|
||||
INNER JOIN T_PRD_PPBOM p2 ON p2.FID=B.FID
|
||||
INNER JOIN T_BD_DEPARTMENT d1 ON d1.FDEPTID=p2.FWORKSHOPID
|
||||
INNER JOIN T_PRD_PPBOMENTRY_C p3 ON p3.FID=B.FID and p3.FENTRYID=B.FENTRYID
|
||||
INNER JOIN T_ORG_Organizations g ON g.forgid=p2.FParentOwnerId
|
||||
inner JOIN T_BD_MATERIAL MP ON MP.FMATERIALID=p2.FMATERIALID
|
||||
INNER JOIN T_ENG_BOM bom ON bom.FID=p2.FBOMID
|
||||
INNER JOIN T_BD_UNIT u2 ON u2.FUNITID=p2.FBASEUNITID
|
||||
INNER JOIN T_BD_UNIT u3 ON u3.FUNITID=p2.FUNITID
|
||||
INNER JOIN T_BAS_BILLTYPE y ON y.FBILLTYPEID=p2.FMOType
|
||||
ORDER BY B.FID,B.FENTRYID,FChangeType
|
||||
/*-----------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
end
|
||||
|
||||
DROP TABLE #matergroup
|
||||
|
||||
COMMIT TRAN
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
--SELECT
|
||||
-- ERROR_NUMBER() AS ErrorNumber
|
||||
-- ,ERROR_SEVERITY() AS ErrorSeverity
|
||||
-- ,ERROR_STATE() AS ErrorState
|
||||
-- ,ERROR_PROCEDURE() AS ErrorProcedure
|
||||
-- ,ERROR_LINE() AS ErrorLine
|
||||
-- ,ERROR_MESSAGE() AS ErrorMessage;
|
||||
--ROLLBACK TRAN
|
||||
END CATCH
|
||||
|
||||
SET NOCOUNT OFF;
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user