【问题标题】:How to convert connect by level in teradata如何在teradata中按级别转换连接
【发布时间】:2011-12-31 14:56:28
【问题描述】:

我试图将 oracle 的按级别连接功能转换为 teradata。我在网上看过很多例子,但这个特别的不一样,

 (SELECT 
     CASE LEVEL 
        WHEN 1 THEN 'MB'
        WHEN 2 THEN 'SB'
        ELSE 'TOTAL'
     END AS DRUG_SOURCE
 FROM
    DUAL 
 CONNECT BY LEVEL <= 3) RW  

如果你们有任何想法,请告诉我。

【问题讨论】:

  • 您可以使用递归 SQL 在 Teradata 中生成层次结构。例如,您可以从缩进列表中的数据字典构建用户或数据库层次结构。您的查询是否还有其他已知关系,例如一个或多个表?
  • 是的,这只是整个查询的一小部分
  • 你能再分享一下吗?否则,我只能为您提供一些递归 SQL 的示例,它可能会或可能不会完成您想要的。
  • 感谢您的关注。此查询的输出与另一个子查询进行内连接,这两个查询位于主查询的 from 块下。例如:Select..from(递归查询)内连接(查询 2)。我不明白如何处理上述查询的递归部分。我知道我们在 TD 中有“recursive with”,但正如我在查询中遇到的情况一样,我没有得到正确形式的“recursive with”语法,因为这里使用了双表名,所以无法使用在 TD 中。
  • 看看这个递归示例 (stackoverflow.com/questions/7807130/…) 虽然这里并不完全需要它,但它向您展示了如何在查询的外部引用 CTE。恐怕你的伪代码/描述不足以让我提出建议的解决方案。

标签: sql oracle case teradata connect-by


【解决方案1】:

嘿,我找到了解决方案。抱歉,我无法清楚地解释我的问题。

下面的代码将完全按照我在 teradata 中想要的方式工作

select 'MB' as DRUG_SOURCE from dual  
union  
select 'SB' as DRUG_SOURCE from dual  
Union  
select 'TOTAL' as DRUG_SOURCE from dual  

【讨论】:

    【解决方案2】:

    你可以试试这个代码:

    select DRUG_SOURCE from (select 'MB' as DRUG_SOURCE,1 as id) a
    union all
    select DRUG_SOURCE from (select 'SB' as DRUG_SOURCE,2 as id) b
    union all
    select DRUG_SOURCE from (select 'TOTAL' as DRUG_SOURCE,3 as id) c
    

    【讨论】:

      猜你喜欢
      • 2017-12-12
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2013-07-16
      • 2019-05-22
      • 1970-01-01
      • 2011-03-27
      相关资源
      最近更新 更多