2016-05-19 7 views
0

У меня есть таблица с четырьмя рядами.как игнорировать определенное значение в ячейке и перейти к следующей строке

column1 | column2 | column3 
--------------------------- 
a  | role | N/A 
b  | N/A  | N/A 
c  | N/A  | year 
c  | year | N/A 

есть способ, что в операторе отбора я могу получить результаты, как

column1 | column2 | column3 
--------------------------- 
a  | role | can be N/A or null 
c  | year | year 

игнорируя N/A. Спасибо.

+1

'где column2 не null'? –

+0

@Taz. , , Что случилось со вторым рядом? –

+0

@Gardon ... игнорировать вторую строку, так как это 'N/A' – Taz

ответ

1

запрос Гордона необходим дополнительный фильтр:

select * 
from (
    select 
     column1, 
     max(nullif(column2, 'N/A')) as column2, 
     max(nullif(column3, 'N/A')) as column3 
    from a_table 
    group by 1 
    ) s 
where column2 notnull or column3 notnull 
order by 1; 

column1 | column2 | column3 
---------+---------+--------- 
a  | role | 
c  | year | year 
(2 rows)  
+0

Привет @Klin ... Я попробовал ваш запрос, но все же я не получаю правильных результатов: в sub query я получаю 'N/A, N/A' вместо 'Год, Год'. Благодарю. – Taz

+0

Запрос в порядке. Проверьте, действительно ли у вас '' N/A'' в вашей таблице (может быть, есть пробелы '' N/A '' или что-то вроде этого). – klin

+0

извинения @Klin. Большое спасибо за ваше решение, он работает. – Taz

1

Вы можете использовать агрегацию:

select column1, max(nullif(column2, 'N/A')) as column2, 
     max(nullif(column3, 'N/A')) as column3 
from t 
group by column1; 

Я понимаю, что это предполагает, что значение column1 во втором ряду действительно «а», а не «б».

+0

@Gordon ... Я попробовал ваш запрос, но я получаю результаты« N/A »: во второй строке я получаю« N/A ',' N/A' вместо 'Year',' Year' – Taz