I have a simple table
create table employees (empno int primary key, empname varchar(30),
emailaddress varchar(30), phonenumber varchar(10))
EMPNO EMPNAME EMAILADDRESS PHONENUMBER
1 Emma [email protected] 82354566
2 Tom [email protected] 984537665
3 Bob [email protected]
I want to show the results such as if phone number for a particular customer is not blank, then make his email address as blank else display the email address as it is.
My desired result should be
EMPNO EMPNAME EMAILADDRESS PHONENUMBER
1 Emma 82354566
2 Tom 984537665
3 Bob [email protected]
It should display blank and should not display not null.
I tried the following
select *
case
when phonenumber is not null
then '' as emailaddress
end
from employees
but it says ORA-00923: FROM keyword not found where expected
Here is my demo - DB Fiddle
CodePudding user response:
Change to:
select empno, empname, phonenumber,
case
when phonenumber is not null
then ''
else emailaddress
end as emailaddress
from employees
CodePudding user response:
As xQbert said, your case construct is wrong, but you are also missing a comma between * and your case expression, and if you combine * with anything else then it has to be prefixed with the table name or alias.
So you could do:
select e.*,
case when phonenumber is not null then null else emailaddress end as etc
from employees e
Or slightly shorter (relying on a missing else evaluating to null anyway):
select e.*,
case when phonenumber is null then emailaddress end as etc
from employees e
Or to not show the email address at all if there is a phone number:
select
empno,
empname,
case when phonenumber is null then emailaddress end as emailaddress,
phonenumber
from employees
| EMPNO | EMPNAME | EMAILADDRESS | PHONENUMBER |
|---|---|---|---|
| 1 | Emma | null | 82354566 |
| 2 | Tom | null | 984537665 |
| 3 | Bob | [email protected] | null |
Or if you only want to show one or the other as a single column:
select
empno,
empname,
case when phonenumber is null then emailaddress else phonenumber end as etc
from employees
Or use coalesce instead of case:
select
empno,
empname,
coalesce(phonenumber, emailaddress) as etc
from employees
| EMPNO | EMPNAME | ETC |
|---|---|---|
| 1 | Emma | 82354566 |
| 2 | Tom | 984537665 |
| 3 | Bob | [email protected] |
