【问题标题】:How can I recursively calculate a value如何递归计算一个值
【发布时间】:2014-08-07 15:12:59
【问题描述】:

我有这张桌子。

Bundles

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

我想获取 id 为 3 的捆绑包的总数量,即1 * 4 * 5 = 20 items

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

【问题讨论】:

  • 这就像你有 5 个捆绑包,每个包由 4 个包组成,每个包包含 1 个项目。那是5*4*1 = 20
  • 使用公用表表达式 (CTE)

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


【解决方案1】:

这是使用 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

列中值的乘法,SELECT EXP(sum(log(quantity))),取自here

【讨论】:

  • 我正在尝试创建一个 CTE,它将为每条记录生成一行,并计算数量列,但它给了我疯狂的结果。 this 有什么问题?
  • 如果您有新问题,应单独提出并链接回此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
相关资源
最近更新 更多