Sql 使用group by消除空值

Sql 使用group by消除空值,sql,oracle,Sql,Oracle,假设我们有如下表(或查询结果): +------------+--------------+--------+--------+--------+--------+ | station_nr | station_name | mode_1 | mode_2 | mode_3 | mode_4 | +------------+--------------+--------+--------+--------+--------+ | 22 | MTO22 | Large

假设我们有如下表(或查询结果):

+------------+--------------+--------+--------+--------+--------+
| station_nr | station_name | mode_1 | mode_2 | mode_3 | mode_4 |
+------------+--------------+--------+--------+--------+--------+
| 22         | MTO22        | Large  | NULL   | NULL   | NULL   |
+------------+--------------+--------+--------+--------+--------+
| 22         | MTO22        | NULL   | NULL   | NULL   | XLARGE |
+------------+--------------+--------+--------+--------+--------+
| 22         | MTO22        | NULL   | Medium | Null   | Null   |
+------------+--------------+--------+--------+--------+--------+
我们需要按站点编号和名称分组并消除空值,所需结果如下:

+------------+--------------+--------+--------+--------+--------+
| station_nr | station_name | mode_1 | mode_2 | mode_3 | mode_4 |
+------------+--------------+--------+--------+--------+--------+
| 22         | MTO22        | Large  | Medium | NULL   | XLARGE |
+------------+--------------+--------+--------+--------+--------+
使用
MAX()

MAX()
忽略
NULL
值。这也适用于
MIN()


但是,请注意,如果您的一列对于给定的电台有两个非空值,则只会显示其中一个(最大值,按字母顺序排列)。

是的,每列只包含非空值,其余都为空@GMBY我们的问题可能与底层查询有关。你应该把它修好。
SELECT 
    station_mr, 
    station_name, 
    MAX(mode_1) mode_1, 
    MAX(mode_2) mode_2, 
    MAX(mode_3) mode_3,
    MAX(mode_4) mode_4
FROM mytable
GROUP BY station_mr, station_name