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
然后使用 SUM
将 Extended_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
我一直在寻找这样的示例问题,如果有人回答,我会请求宽限(我原以为会,但很难用我搜索的术语找到有意义的结果。)
我在一家制造厂工作,在制造过程中,每个零件都会发布一个新的序列号。我必须使用的数据库 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
然后使用 SUM
将 Extended_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