在oracle中,case when行转列后如何消除空值
时间: 2023-08-28 18:31:36 浏览: 235
在 Oracle 中,使用 CASE WHEN 语句进行行转列时,如果想要消除空值,可以在 CASE WHEN 语句中使用 COALESCE 函数来将空值转化为其他值,然后再使用 WHERE 子句过滤掉这些值。
具体操作步骤如下:
1. 使用 CASE WHEN 语句将行转列,并使用 COALESCE 函数将空值转化为其他值。例如:
```
SELECT col1,
COALESCE(MAX(CASE WHEN col2 = 'A' THEN col3 END), 0) AS col2_A,
COALESCE(MAX(CASE WHEN col2 = 'B' THEN col3 END), 0) AS col2_B,
COALESCE(MAX(CASE WHEN col2 = 'C' THEN col3 END), 0) AS col2_C
FROM mytable
GROUP BY col1
```
在这个例子中,如果 col3 中某些单元格没有值,则 COALESCE 函数将其转化为 0。
2. 使用 WHERE 子句过滤掉值为 0 的行。例如:
```
SELECT col1,
COALESCE(MAX(CASE WHEN col2 = 'A' THEN col3 END), 0) AS col2_A,
COALESCE(MAX(CASE WHEN col2 = 'B' THEN col3 END), 0) AS col2_B,
COALESCE(MAX(CASE WHEN col2 = 'C' THEN col3 END), 0) AS col2_C
FROM mytable
GROUP BY col1
HAVING COALESCE(MAX(CASE WHEN col2 = 'A' THEN col3 END), 0) <> 0
OR COALESCE(MAX(CASE WHEN col2 = 'B' THEN col3 END), 0) <> 0
OR COALESCE(MAX(CASE WHEN col2 = 'C' THEN col3 END), 0) <> 0
```
在这个例子中,HAVING 子句过滤掉值为 0 的行,只返回不为空的行。
阅读全文