首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MS SQL 複雜存儲過程:合計科目遞歸計算

     編輯:程式設計疑難解答

業務場景

  • 表1:科目配置(合計科目 A 開頭,明細科目數字開頭,計算類型 1=加、2=減)。
  • 表2:明細科目實際值。
  • 表3:合計科目定義(如 A=A01-A02+A03)。
  • 目標:根據表3遞歸計算所有合計科目值。

解決思路

  1. 構建遞歸 CTE(Common Table Expression),從無依賴的明細科目開始,逐層向上計算合計科目。
  2. 利用拓撲排序或遞歸查詢處理依賴鏈。
  3. 注意循環依賴檢測。

核心 SQL 框架

WITH RECURSIVE CalcCTE AS (
    -- 基礎層:明細科目直接取值
    SELECT code, value, 0 AS level FROM DetailValues
    UNION ALL
    -- 遞歸層:合計科目根據配置計算
    SELECT c.parent_code, 
           SUM(CASE WHEN cfg.calc_type=1 THEN cte.value ELSE -cte.value END),
           cte.level + 1
    FROM SubjectConfig cfg
    JOIN CalcCTE cte ON cfg.child_code = cte.code
    GROUP BY c.parent_code
)
SELECT * FROM CalcCTE WHERE code LIKE 'A%'; -- 合計科目結果

注意事項

具體實現需根據實際表結構調整欄位名、數據類型、遞歸深度限制(MAXRECURSION)。建議提供完整建表腳本與樣本數據以獲得精確代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved