SQL如果值存在,请显示一列,然后在其中显示是

时间:2019-02-16 03:00:03

标签: sql oracle

我想编写一个查询来添加一个新列,如果其中一个数据中有一个以score名称命名的数据,如果表中某些行的数据不存在,则查询应创建一个列并显示“否”,但如果其中有数据,则应显示“是”,如下所示。

df$city <- gsub("[[:punct:]]|[[:digit:]]", "", df$city)

查询后,应显示

Name      Phone     Score    
Ali       1111      90
Karim     2222      80
Ramin     33333     10
Millad    3333      
Rawof     5555      

4 个答案:

答案 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)

您可以使用casenvl2decode

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.