英文:
Hierarchical query in Teradata
问题
我有如下层次数据。
|序列号 | 主要标志 |上一个序列号|
| 101 | 1 | 56 |
| 56 | 0 | NULL |
| 505 | 0 | NULL |
| 223 | 1 | 156 |
| 156 | 0 | 93 |
| 93 | 0 | 42 |
42 | 0 | NULL |
前两行在主要标志为1时与上一个序列号相关联,因此它们的层次总数为2。
第三行与任何内容都不相关,因为上一个序列号为NULL,所以总计为0。
第四行与下面的3条记录相关联,所以总数为4。
我需要一个查询来查找主要标志为1时行的总相关计数。在Teradata中如何实现这一点?
英文:
I have hierarchical data as follows.
|Serial No | Primary Flag |Prev SerialNo|
| 101 | 1 | 56 |
| 56 | 0 | NULL |
| 505 | 0 | NULL |
| 223 | 1 | 156 |
| 156 | 0 | 93 |
| 93 | 0 | 42 |
42 | 0 | NULL |
First two rows are related by Previous serial number when primary flag, so total counts in their hierarchy is 2
Third row is not related to any thing since Previous serial number is NULL., so total count is 0.
Fourth row is related to below 3 records, so total count is 4.
I need a query to find the total related counts for rows when Primary flag is 1.How can I achieve this in Teradata?
答案1
得分: 2
以下是代码的中文翻译:
假设您不想为Serial_No 505返回一行记录,您可以使用递归查询和聚合:
WITH RECURSIVE r AS (
选择 h.Serial_No AS Primary_SerialNo,h.Serial_No,h.Prev_SerialNo,1(整数)作为级别
从 hierTbl h WHERE h.Primary_Flag=1
UNION ALL
选择 r.Primary_SerialNo,h.Serial_No,h.Prev_SerialNo,r.Level+1
从 hierTbl h JOIN r ON r.Prev_SerialNo = h.Serial_No
)
选择 Primary_SerialNo,MAX(Level)作为Related
从 r GROUP BY 1;
希望这对您有所帮助。
英文:
Assuming you don't want to return a row for Serial_No 505, you can use a recursive query and aggregation:
WITH RECURSIVE r AS (
SELECT h.Serial_No AS Primary_SerialNo, h.Serial_No, h.Prev_SerialNo, 1 (INTEGER) as Level
FROM hierTbl h WHERE h.Primary_Flag=1
UNION ALL
SELECT r.Primary_SerialNo, h.Serial_No, h.Prev_SerialNo, r.Level+1
FROM hierTbl h JOIN r ON r.Prev_SerialNo = h.Serial_No
)
Select Primary_SerialNo, MAX(Level) as Related
FROM r GROUP BY 1;
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论