NAME | TELEPHONE_1 | TELEPHONE_2 | TELEPHONE_3
Max | 00491633888 | NULL | NULL
Soph | NULL | NULL | NULL
Pes | NULL | 0049163232 | 0049111111
对于Max,输出应为00491633888对于Soph,输出应为NULL对于Pes,输出应为找到的第一个条目。因此电话2 -〉0049163232
SELECT
CASE WHEN TELEPHONE_1 IS NOT NULL THEN TELEPHONE_1
ELSE WHEN TELEPHONE_2 IS NOT NULL THEN TELEPHONE_2
ELSE WHEN TELEPHONE_3 IS NOT NULL THEN TELEPHONE_3
ELSE NULL END AS TELEPHONE
FROM test
我试过了,但没用。
3条答案
按热度按时间bxpogfeg1#
使用
coalesce
;它将返回第一个非空值:演示:
mf98qq942#
(my原文):“NVL()函数接受表达式列表并返回第一个非空值”
我错了,NVL()只带2个参数,COALESCE()更标准,更灵活。
vhipe2zx3#
您不希望在
WHEN
之前使用ELSE
关键字(删除这些关键字后,代码才能正常工作):输出:
| 姓名|电话|
| - ------|- ------|
| 马克斯|00491633888|
| 索菲|* 无效 *|
| 佩斯|0049163232|
也可以使用
COALESCE
(ANSI标准的一部分):或
NVL
(这是一个Oracle函数,只接受2个参数):fiddle