Если значение в столбце не является ни 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; 

Возвращает столбец со всеми "НЕТ".

0
nak5120 1 Май 2019 в 18:09

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'

2
forpas 1 Май 2019 в 15:42

replace() не нужен, просто используйте выражение case:

select d.*, (case when cola in ('a', 'b')
                  then cola else 'NO'
             end)
from dataset d;
0
Yogesh Sharma 1 Май 2019 в 15:12

Еще один способ сделать это ...

SELECT Col1, Col2, ColN,
       CASE
         WHEN ColA = 'A' OR ColA = 'B' THEN ColA
         ELSE NULL
       END AS ColA
FROM   dataset   
0
DxTx 1 Май 2019 в 15:25

Чтобы быть в безопасности, вам, скорее всего, также необходимо добавить проверку 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
-1
Raymond Nijland 1 Май 2019 в 15:28
SELECT 
CASE WHEN ColA NOT LIKE 'A' OR 'B' THEN 'NO' ELSE ColA END AS 'ColA'
,ColB
FROM Dataset;
0
DxTx 1 Май 2019 в 15:36