【问题标题】:Using Case-When in Teradata在 Teradata 中使用 Case-When
【发布时间】:2019-03-31 17:34:33
【问题描述】:

简单的问题,但让我发疯了一段时间。在Teradata中有下表:

A       B
112211  
113311  56
226144  61
996688  66
005400  
771277 

col-B 中的空白字段需要从col-A 中提取数字,例如:

SELECT A
CASE 'B'
WHEN 'B' IS NULL THEN SUBSTR('A',3,4)
END AS 'B'
FROM TABLE_T1;

参考了一些文档,但没有在上述查询中找到问题所在。此查询可以在 MySQL 上运行,但为什么不能在 Teradata 上运行。

预期的 O/P:

A       B
112211  22
113311  56
226144  61
996688  66
005400  54
771277  12

【问题讨论】:

  • 为什么不在 Teradata 中:这在大多数其他 DBMS 中也会失败,因为它是 searched CASE WHEN condition THEN... 之间的混合重视 CASE column WHEN x THEN

标签: sql database teradata


【解决方案1】:

您可以使用这种形式的case expression 注意区别是case when ... 而不是case b when ...。也仅对文字使用单引号,对标识使用双引号。 (请注意为什么要使用单引号。)

SELECT
      A
    , CASE WHEN B IS NULL THEN SUBSTR(A,3,4) 
           ELSE B 
      END AS "B"
FROM TABLE_T1;

但我相信你也可以使用coalesce()

SELECT
      A
    , coalesce(B ,SUBSTR(A,3,4) AS "B"
FROM TABLE_T1;

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2015-09-17
    • 2020-11-29
    • 2013-06-13
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多