Postgresql 如何忽略单元格中的某个值并转到下一行

Postgresql 如何忽略单元格中的某个值并转到下一行,postgresql,postgresql-9.1,Postgresql,Postgresql 9.1,我有一张四排的桌子 column1 | column2 | column3 --------------------------- a | role | N/A b | N/A | N/A c | N/A | year c | year | N/A 在select语句中有没有一种方法可以得到如下结果 column1 | column2 | column3 --------------------------- a

我有一张四排的桌子

column1 | column2 | column3
---------------------------
 a      | role    | N/A
 b      | N/A     | N/A
 c      | N/A     | year
 c      | year    | N/A
在select语句中有没有一种方法可以得到如下结果

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

谢谢。

您可以使用聚合:

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

我意识到这是假设第二行的
列1
值实际上是“a”而不是“b”。

您可以使用聚合:

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

我意识到这是假设第二行的
column1
值实际上是“a”而不是“b”。

Gordon的查询需要额外的过滤器:

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)    

Gordon的查询需要额外的筛选器:

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)    

其中第2列不为null
?@Taz。第二行发生了什么事?@Gardon…忽略第二行,因为它是
N/A
,其中column2不为null
?@Taz。第二行怎么了?@Gardon…忽略第二行,因为它是
N/A
@Gordon…我尝试了你的查询,但我得到了
N/A
,结果是:在第二行,我得到了
N/A
N/A
,而不是
Year
Year
@Gordon…我尝试了你的查询,但我得到了
N/A
作为结果:在第二行我得到了
N/A
N/A
而不是
Year
Year
你好@Klin…我尝试了你的查询,但仍然没有得到正确的结果:在子查询本身,我得到了
N/A,不适用
而不是
年,年
。谢谢。查询是可以的。检查您的表中是否确实有
'N/A'
(可能有一些空格
'N/A'
或类似的内容)。向@Klin道歉。非常感谢您的解决方案,它正在工作。嗨@Klin…我尝试了您的查询,但仍然没有得到正确的结果:在子查询本身中,我得到的是
N/A,N/A
,而不是
Year,Year
。谢谢。查询是可以的。检查您的表中是否确实有
'N/A'
(可能有一些空格
'N/A'
或类似的内容)。向@Klin道歉。非常感谢您的解决方案,它正在工作。