konhon

          忘掉過去,展望未來。找回自我,超越自我。
          逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

          Google

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks

          // 一個算物料計劃的存儲過程
          CREATE FUNCTION DBO.F_BomList
          (
                @PPartNo NVARCHAR(20),
                @PQuantity INT = 1,
                @PType BIT = 0
          )
          RETURNS @BomList TABLE(
             PartNo NVARCHAR(20),
             FUsage FLOAT,
             Raw_ID INT)
          AS 
          BEGIN
               DECLARE @BomListTmp TABLE(
                     CPartNo NVARCHAR(20),
                     PartNo NVARCHAR(20),
                     FUsage FLOAT,
                     _Level INT)
                --@Lev是層的定義
               DECLARE @LLevel INT, @LSample INT
               SET @LLevel  = 1
               SELECT @LSample = ISNULL(Sample, 1) FROM Bom WHERE CPartNo = @PPartNo
               IF @LSample = 0
                    SET @LSample = 1
               --先取@PPartNo的第一層數據到#Temp
               INSERT INTO @BomListTmp (CPartNo, PartNo, FUsage, _Level)
                               SELECT CPartNo, CPartNo, 1, @LLevel FROM Bom WHERE CPartNo = @PPartNo
               --以循環方式取得所有的下層元件清單到#Temp
               WHILE EXISTS(SELECT CPartNo FROM @BomListTmp WHERE _Level = @LLevel)
               BEGIN
                     SET @LLevel = @LLevel + 1
                     INSERT INTO @BomListTmp (CPartNo, PartNo, FUsage, _Level)
                                     SELECT a.CPartNo, a.PartNo,
                                     CASE WHEN @LLevel = 2 THEN  a.FUsage * b.FUsage / @LSample ELSE a.FUsage * b.FUsage END, @LLevel
                                     FROM BomDtl a, (SELECT PartNo, FUsage FROM @BomListTmp WHERE _Level + 1= @LLevel) b
                                     WHERE a.CPartNo = b.PartNo
               END
               -- 計算總量
               INSERT INTO @BomList(PartNo, FUsage, Raw_ID)
                      SELECT PartNo, SUM(FUsage) * @PQuantity FUsage, 0 FROM @BomListTmp WHERE _Level <> 1
                      GROUP BY PartNo
               IF @PType = 0
                     -- 標識非原材料
                    UPDATE @BomList SET Raw_ID = 1
                          WHERE PartNo IN (SELECT DISTINCT CPartNo FROM BomDtl)
               RETURN
          End

           

          posted on 2005-09-08 06:09 konhon 優華 閱讀(429) 評論(0)  編輯  收藏 所屬分類: MS SQL Server
          主站蜘蛛池模板: 祁门县| 临湘市| 万源市| 玛多县| 射洪县| 晋州市| 分宜县| 甘谷县| 宝坻区| 稷山县| 昌吉市| 金昌市| 什邡市| 临潭县| 咸丰县| 乐平市| 海门市| 视频| 敦化市| 三江| 双桥区| 鄂托克旗| 夏河县| 通化市| 黔西县| 徐州市| 石首市| 凤山市| 涿鹿县| 贵港市| 巴马| 子长县| 绥化市| 长岛县| 大足县| 自治县| 高雄市| 隆昌县| 泸溪县| 昌都县| 永仁县|