总结层次结构中行或数据总和的计数

时间:2015-01-16 12:39:53

标签: sql-server tsql

DECLARE @orderTable TABLE
(
    orderNO INT IDENTITY(1,1),
    Qty NUMERIC(10,3),
    agentId int,
    parentid INT
)

INSERT INTO @orderTable (Qty, agentId, parentid )
VALUES (9, 1, 0),
       (2, 2, 1),
       (3, 3, 1)

SELECT * FROM @orderTable

orderNO Qty     agentId parentid
1       9.000   1       0
2       2.000   2       1
3       3.000   3       1

在上表中,我想根据父母总结数量。总和也应该有父订单数量。

希望在不使用union的情况下在单个查询中实现此目的。

输出:

parentId qty 
1        14

1 个答案:

答案 0 :(得分:1)

此查询:

SELECT o.agentId as parentId,  t.childrenSum + SUM(Qty) OVER() AS qty
FROM @orderTable AS o
OUTER APPLY (
   SELECT SUM(Qty) AS childrenSum
   FROM @orderTable
   WHERE parentid = o.agentId
) t
WHERE o.parentid = 0

生成此输出:

parentId    qty
----------------
1           14.000

WHERE条款:

WHERE o.parentid = 0

可能会选择所有记录,而OUTER APPLY子查询会计算每个父母的所有子项的数量总和。