【问题标题】:Teradata - to solve a data issue with query or ProcedureTeradata - 通过查询或过程解决数据问题
【发布时间】:2015-03-10 10:27:54
【问题描述】:

我是 Teradata 的新手。我必须使用 Teradata 中的 SQL/存储过程来解决以下问题。

问题-如下图输入数据,我们需要通过Col1和Col2的值来链接表中的记录。

逻辑 - 对于所有具有 col1 和 col2 链接值的记录集,min(col1) 应为 col3。

例如,第 1-5 行由 3160370 和 4856938 值链接,因此 col3 中应该有 3160370。

输入数据

    Col1    Col2
1   3160370 3160370
2   3160370 4856938
3   3160370 11633062
4   4856938 11633063
5   4856938 11633064
6   4271481 4271481
7   4271481 5968049
8   4271481 12744173
9   5968049 12744174
10  5968049 12744175

输出数据

    Col1    Col2        Col3
1   3160370 3160370     3160370
2   3160370 4856938     3160370
3   3160370 11633062    3160370
4   4856938 11633063    3160370
5   4856938 11633064    3160370
6   4271481 4271481     4271481
7   4271481 5968049     4271481
8   4271481 12744173    4271481
9   5968049 12744174    4271481
10  5968049 12744175    4271481

如果需要更多详细信息来解决此问题,请告诉我。

请帮忙!

【问题讨论】:

    标签: sql teradata recursive-query


    【解决方案1】:

    这是一个简单的递归任务:

    WITH RECURSIVE cte (Col1, Col2, minCol) AS
     (
       SELECT Col1, Col2, Col1 AS minCol
       FROM   tab
       WHERE  Col1 = Col2
    
       UNION ALL
    
       SELECT t.Col1, t.Col2, cte.minCol
       FROM   cte JOIN tab AS t
       ON  cte.Col2 = t.Col1
       AND t.Col1 <> t.Col2
     )
    SELECT * FROM cte
    

    当然,如果你的数据中有任何循环,那就更复杂了……

    【讨论】:

    • 非常感谢您的回复并提出解决方案。您能否帮助理解此递归查询的工作方式。我不明白查询中的 vt 是什么?
    • 谢谢,我现在明白了,在迭代查询选项卡中应该是“tab as vt”。您能否解释一下,数据中的循环是什么意思?
    • 你是对的,这是对现有查询的剪切&粘贴&修改的剩余部分,修复了我的代码。循环意味着反向引用数据,例如添加 Col1:11633064 和 Col2:3160370 会导致当前查询无限循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多