如何删除空值并获取如下所示的表?

时间:2017-10-27 06:51:46

标签: sql oracle

这里我有oracle db表,如下所示:

name  a1     b1     c1
----  ---    ---    ---
a     z      null   null  
a     null   y      null
a     nul    null   z
b     y      z      null
b     null   null   m

所以我的预期输出表是:

name  a1     b1     c1
----  ---    ---    ---
a     z      y      z  
b     y      z      m

3 个答案:

答案 0 :(得分:3)

由于汇总函数[除了count(*) ]忽略NULL,您只需使用MAXMINgroup by即可得到你想要的结果如下。

SELECT name,
       max(a1) AS a1,
       max(b1) AS b1,
       max(c1) AS c1
FROM table1
GROUP BY name

OR

SELECT name,
       min(a1) AS a1,
       min(b1) AS b1,
       min(c1) AS c1
FROM table1
GROUP BY name

<强>结果:

NAME    A1  B1  C1
------------------
a       z   y   z
b       y   z   m

<强> DEMO

答案 1 :(得分:2)

你可以尝试这样的事情:

select name, max(nvl(a1, '')), max(nvl(a2, '')), max(nvl(a3, ''))
from table
group by name

答案 2 :(得分:1)

SELECT name, MAX( a1 ) , MAX( b1 ) , MAX( c1 ) 
FROM Table
GROUP BY name 

对于SQL,这将起作用