在 Teradata 中使用 Case-When
Using Case-When in Teradata
简单的问题,但让我发疯了一段时间。在 Teradata
中有以下 table:
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
您可以使用这种形式的 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;
简单的问题,但让我发疯了一段时间。在 Teradata
中有以下 table:
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
您可以使用这种形式的 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;