Если значение в столбце не является ни A, ни B, то замените это значение на «NO».
dataset
ColA ColB
A L
NULL P
B M
C G
Ожидаемый выход:
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;
Возвращает столбец со всеми "НЕТ".
5 ответов
Ваш код не должен компилироваться, поэтому я думаю, что это не настоящий код.
(1) Он отсутствует THEN
после WHEN
.
(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 NOT IN('A','B')
оценивается как NULL
, и замена не производится.
Вы можете написать заявление с помощью href="https://docs.snowflake.net/manuals/sql-reference/functions/iff.html" rel="nofollow noreferrer"> Снежинка . Функция IFF()
выглядит следующим образом:
SELECT *, IFF(ColA IN ('A', 'B'), ColA, 'NO') NewColA
FROM dataset;
Если ColA IN ('A', 'B')
оценивается как NULL
, то возвращается FALSE
часть IFF()
, а это 'NO'
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, определенные NOT IN()
, не должны работать со значениями NULL ..
Поскольку ColA NOT IN('A','B')
- то же самое, что писать ColA <> 'A' OR ColB <> 'B'
, а SELECT 'A' <> NULL
никогда не должно быть правдой.
< Сильный > Query
SELECT
(
CASE
WHEN ColA NOT IN('A','B') OR ColA IS NULL
THEN 'NO'
ELSE ColA
END
) AS ColA
, ColB
FROM
dataset
SELECT
CASE WHEN ColA NOT LIKE 'A' OR 'B' THEN 'NO' ELSE ColA END AS 'ColA'
,ColB
FROM Dataset;
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.