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