Sql 用不等于多个值的值替换列
如果列中的值不是a或B,则将该值替换为“否” 预期产出:Sql 用不等于多个值的值替换列,sql,case-when,snowflake-cloud-data-platform,Sql,Case When,Snowflake Cloud Data Platform,如果列中的值不是a或B,则将该值替换为“否” 预期产出: ColA ColB A L NO P B M NO G 我试过了,但没有成功: SELECT *, CASE WHEN ColA NOT IN(A,B) REPLACE (ColA, ColA, 'NO') ELSE ColA END ColA FROM dataset; 它返回一列所有“否” replace()不需要,只需使用case表达式
ColA ColB
A L
NO P
B M
NO G
我试过了,但没有成功:
SELECT *,
CASE WHEN ColA NOT IN(A,B) REPLACE (ColA, ColA, 'NO')
ELSE ColA
END ColA
FROM dataset;
它返回一列所有“否” replace()
不需要,只需使用case
表达式:
select d.*, (case when cola in ('a', 'b')
then cola else 'NO'
end)
from dataset d;
另一种方法是
SELECT Col1, Col2, ColN,
CASE
WHEN ColA = 'A' OR ColA = 'B' THEN ColA
ELSE NULL
END AS ColA
FROM dataset
为了安全起见,您很可能还需要添加一个
IS NULL
检查我认为在()中定义的SQL标准不应使用空值 由于
ColA不在('A','B')
与写入ColA'A'或ColB'B'
相同,并且SELECT'A'NULL
永远不应为true
查询
SELECT
(
CASE
WHEN ColA NOT IN('A','B') OR ColA IS NULL
THEN 'NO'
ELSE ColA
END
) AS ColA
, ColB
FROM
dataset
你的代码,不应该编译,所以我猜它不是实际的代码
(1) 当时,它在
之后
缺失(2) 值
A
和B
应该用单引号括起来,否则会被识别为列名所以应该写为:
SELECT *,
CASE
WHEN ColA NOT IN('A','B') THEN REPLACE(ColA, ColA, 'NO')
ELSE ColA
END NewColA
FROM dataset;
这将产生所需的结果,除非ColA
中存在NULL
值在
NULL
的情况下,ColA不在('A','B')
将计算为NULL
,不会进行替换您可以使用雪花的函数编写语句,如下所示:
SELECT *, IFF(ColA IN ('A', 'B'), ColA, 'NO') NewColA
FROM dataset;
如果ColA In('A','B')
的计算结果为NULL
,则返回IFF()
的FALSE
部分,即'NO'
SELECT *,
CASE
WHEN ColA NOT IN('A','B') THEN REPLACE(ColA, ColA, 'NO')
ELSE ColA
END NewColA
FROM dataset;
SELECT *, IFF(ColA IN ('A', 'B'), ColA, 'NO') NewColA
FROM dataset;