我想编写一个查询来添加一个新列,如果其中一个数据中有一个以score名称命名的数据,如果表中某些行的数据不存在,则查询应创建一个列并显示“否”,但如果其中有数据,则应显示“是”,如下所示。
表
df$city <- gsub("[[:punct:]]|[[:digit:]]", "", df$city)
查询后,应显示
Name Phone Score
Ali 1111 90
Karim 2222 80
Ramin 33333 10
Millad 3333
Rawof 5555
答案 0 :(得分:2)
您可以尝试将CASE WHEN与合并功能一起使用。
SELECT *,CASE WHEN coalesce(Score,'') <> '' THEN 'yes' else 'no' end 'new_column'
FROM T
修改
在有关NULL的Oracle文档中
Oracle数据库将长度为零的字符值视为空。
SELECT t1.*,(CASE WHEN t1.Score IS NOT NULL THEN 'yes' else 'no' end) as new_column
FROM T t1
答案 1 :(得分:0)
您可以尝试使用CASE WHEN
表达式
select name, phone, score, case when score is null or score='' then 'no' else 'yes' end
from tablename
答案 2 :(得分:0)
DECLARE @table AS TABLE
(
[Name] VARCHAR(32),
Phone VARCHAR(16),
Score int
)
INSERT INTO @table
VALUES
('Ali', '1111', 90),
('Karim', '2222', 80),
('Ramin', '33333', 10),
('Millad', '3333', NULL ),
('Rawof', '5555', NULL)
SELECT
[Name],
Phone,
CASE
WHEN SCORE IS NULL THEN 'no'
ELSE 'yes'
END as new_column
FROM
@table
答案 3 :(得分:0)
您可以使用case
,nvl2
或decode
。
select name, phone, score
, case when score is null then 'no' else 'yes' end as new_column1
, nvl2(score,'yes','no') as new_column1
, decode(score, null,'no', 'yes') as new_column3
from demo;
nvl2
是最紧凑的,但是有点晦涩难懂。我可能会自己选择case
。
如果您希望此表达式永久可用,则可以将其设为虚拟列:
create table demo (name, phone, score) as
select 'Ali', 1111, 90 from dual union all
select 'Karim', 2222, 80 from dual union all
select 'Ramin', 33333, 10 from dual union all
select 'Millad', 3333, null from dual union all
select 'Rawof', 5555, null from dual;
alter table demo add new_column generated always as (case when score is null then 'no' else 'yes' end);
select * from demo;
NAME PHONE SCORE NEW_COLUMN
------------------------------ ---------- ---------- ----------
Ali 1111 90 yes
Karim 2222 80 yes
Ramin 33333 10 yes
Millad 3333 no
Rawof 5555 no
5 rows selected.