T-SQL 求和总值而不是多次重新加入 table

T-SQL to sum total value instead of rejoining table multiple times

我一直在寻找这样的示例问题,如果有人回答,我会请求宽限(我原以为会,但很难用我搜索的术语找到有意义的结果。)

我在一家制造厂工作,在制造过程中,每个零件都会发布一个新的序列号。我必须使用的数据库 table 在 Container 字段中记录了序列号,在 From_Container 字段中记录了部件之前记录的序列号。

我正在尝试 SUM Extended_Cost 列中我们不得不重新执行操作的部分。

这是来自 tbl_Container 的数据示例:

Container   From_Container  Extended_Cost   Part_Key Operation
10                       9  10               PN_100  60
9                        8  10               PN_100  50
8                        7  10               PN_100  40
7                        6  10               PN_100  30
6                        5  10               PN_100  20
5                        4  10               PN_100  50
4                        3  10               PN_100  40
3                        2  10               PN_100  30
2                        1  10               PN_100  20
1                      100  10               PN_100  10

在这个例子中,我期望返回的 SUM 是 40,因为操作 20、30、40 和 50 全部重新完成并且每个花费 10 美元。

到目前为止,我已经能够通过以下方式使用别名将 table 重新加入自身 10 次来做到这一点:

      LEFT OUTER JOIN   tbl_Container  AS  FCP_1
                  ON    tbl_Container.From_Container = FCP_1.Container
                  AND   FCP_1.Operation       <= tbl_Container.Operation
                  AND   tbl_Container.Part_Key       = FCP_1.Part_Key

然后使用 SUMExtended_Cost 字段相加。但是,我违反了 DRY 原则,必须有更好的方法。

提前感谢您的帮助,

您可以试试这个查询。

;WITH CTE AS
(
    SELECT TOP 1 *, I = 0 FROM tbl_Container C ORDER BY Container 
    UNION ALL
    SELECT T.*, I = I + 1 FROM CTE 
        INNER JOIN tbl_Container T 
            ON CTE.Container = T.From_Container 
            AND CTE.Part_Key = T.Part_Key
)
SELECT Part_Key, SUM(T1.Extended_Cost) Sum_Extended_Cost FROM CTE T1
WHERE 
    EXISTS( SELECT * FROM 
            CTE T2 WHERE 
            T1.Operation = T2.Operation 
            AND T1.I > T2.I ) 
GROUP BY Part_Key

结果:

Part_Key   Sum_Extended_Cost
---------- -----------------
PN_100     40