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 優華 閱讀(435) 評論(0)  編輯  收藏 所屬分類: MS SQL Server
          主站蜘蛛池模板: 明溪县| 昭觉县| 西平县| 德令哈市| 南阳市| 赤壁市| 囊谦县| 安徽省| 乌鲁木齐市| 汕尾市| 富平县| 宁明县| 禄劝| 惠水县| 溆浦县| 柳河县| 博野县| 尚义县| 大姚县| 南汇区| 正定县| 彰化县| 车险| 洪泽县| 农安县| 琼海市| 高阳县| 常德市| 内丘县| 广安市| 四子王旗| 盐源县| 台湾省| 项城市| 长治县| 中山市| 始兴县| 崇左市| 衡东县| 那曲县| 临高县|