我如何递归计算一个值

时间:2014-08-07 15:12:59

标签: sql-server common-table-expression recursive-cte

我有这张桌子。

Bundles

id | parent_id | quantity
 1 | 0         | 1
 2 | 1         | 4
 3 | 2         | 5

我想获取ID为3的捆绑包的总数量,即1 * 4 * 5 = 20个商品

这可以通过一个查询完成吗?

1 个答案:

答案 0 :(得分:3)

以下是使用CTE的解决方案:

<强>设定:

CREATE TABLE Table1
    (id int, parent_id int, quantity int)
;

INSERT INTO Table1
    (id, parent_id, quantity)
VALUES
    (1, 0, 1),
    (2, 1, 4),
    (3, 2, 5),
    (4, 0, 7),
    (5, 4, 10)
;

CTE返回总计id=3及其父项:

;WITH myCTE AS
(
    SELECT id, parent_id, quantity
    FROM Table1
    WHERE id = 3
    UNION ALL
    SELECT T.id, T.parent_id, T.quantity
    FROM Table1 T
       JOIN myCTE C ON T.id = C.parent_id
)
SELECT EXP(sum(log(quantity))) 
FROM myCTE

Demo SQL Fiddle

here获取的SELECT EXP(sum(log(quantity)))列中值的乘法方法。