You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Teradata中统计Primary Flag为1的层级数据关联总数?

在Teradata中统计主节点的层级关联总数

问题背景

给定如下层级数据(通过Prev SerialNo关联父子节点,Primary Flag=1的是需要统计的主节点):

Serial NoPrimary FlagPrev SerialNo
101156
560NULL
5050NULL
2231156
156093
93042
420NULL

需要统计每个Primary Flag=1的节点的整条关联链总长度(包含自身):

  • 101关联到56,总长度为2
  • 223关联到156→93→42,总长度为4

解决方案:使用递归CTE

Teradata支持递归WITH语句,可用于遍历层级结构并统计链长度,具体SQL如下:

WITH recursive_hierarchy AS (
    -- 锚点成员:选取所有主节点,初始计数为1(包含自身)
    SELECT 
        "Serial No" AS SerialNo,
        "Primary Flag" AS PrimaryFlag,
        "Prev SerialNo" AS PrevSerialNo,
        1 AS hierarchy_count
    FROM your_table
    WHERE "Primary Flag" = 1
    
    UNION ALL
    
    -- 递归成员:逐层遍历关联节点,计数累加
    SELECT 
        rh.SerialNo,
        rh.PrimaryFlag,
        t."Prev SerialNo",
        rh.hierarchy_count + 1
    FROM recursive_hierarchy rh
    JOIN your_table t ON rh.PrevSerialNo = t."Serial No"
)
-- 统计每个主节点的最长链长度
SELECT 
    SerialNo,
    MAX(hierarchy_count) AS total_hierarchy_levels
FROM recursive_hierarchy
GROUP BY SerialNo
ORDER BY SerialNo;

代码说明

  1. 锚点成员:筛选出所有Primary Flag=1的行,将每个节点的初始层级计数设为1(代表自身)。
  2. 递归成员:通过PrevSerialNo与下一层节点的Serial No关联,每次递归时将层级计数加1,直到PrevSerialNo为NULL(无法找到下一层节点)时停止递归。
  3. 最终统计:对每个主节点分组,取最大的层级计数,即为该节点整条关联链的总长度。

执行结果

运行上述SQL后,将得到如下结果:

SerialNototal_hierarchy_levels
1012
2234

内容的提问来源于stack exchange,提问作者Leon35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:00:16