Как создать представление, исключающее данные, которые не соответствуют ни одному из условий, установленных в операторе CASE? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать отдельное представление, которое берет данные из другого представления и добавляет один столбец для целей классификации;однако, как и сейчас, у меня есть очень много записей, которые имеют значение NULL в этом дополнительном столбце ... Мне было интересно, смогу ли я как-то исключить записи, которые не соответствуют ни одному из условий, установленных вCASE заявление, которое я использую, чтобы изменить представление?Заранее спасибо

alter view2
select col1, case when col2='love' then 'non-shop'
when col2='choose' and col3='brand' then 'non-shop'
when col2='choose' and col3<>'brand' then 'shop'
when col2='buy' then 'shop'
end traffic_type
from view1

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Я бы сделал:

alter view view2 as
    select col1, v11.traffic_type
    from view1 v1 cross apply
         ( values (case when (col2 = 'love') or (col2 = 'choose' and col3 = 'brand')
                        then 'non-shop'
                        when (col2 = 'choose' and col3 <> 'brand') or (col2 = 'buy')
                        then 'shop'
                   end)
         ) v11(traffic_type)
    where v11.traffic_type is not null;
0 голосов
/ 18 февраля 2019

Построение моего комментария:

ALTER VIEW view2 as 

;WITH CTE AS
(
select col1, case when col2='love' then 'non-shop'
when col2='choose' and col3='brand' then 'non-shop'
when col2='choose' and col3<>'brand' then 'shop'
when col2='buy' then 'shop'
end as traffic_type
from view1
)
select * from CTE
where traffic_type is not null

Как сказал @Larnu, я бы просто поместил здесь оригинальный запрос, а не цепочку из представления1

...