oralce case when行转列
时间: 2023-12-08 17:39:09 浏览: 83
以下是Oracle中使用CASE WHEN实现行转列的示例:
假设我们有一个表格,其中包含学生的姓名和成绩,我们想要将每个学生的成绩转换为列名,并将其值作为行中的值。我们可以使用以下查询来实现:
```sql
SELECT name,
MAX(CASE WHEN subject = 'Math' THEN score END) AS Math,
MAX(CASE WHEN subject = 'English' THEN score END) AS English,
MAX(CASE WHEN subject = 'Science' THEN score END) AS Science
FROM scores
GROUP BY name;
```
在这个查询中,我们使用了三个CASE WHEN表达式,每个表达式都将特定的科目成绩转换为列名。我们使用MAX函数来获取每个学生的最高分数,并使用GROUP BY子句按姓名分组。
相关问题
在oracle中,case when行转列后如何消除空值
在 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 的行,只返回不为空的行。
oracle case when 0.5转字符串变成.5
您的问题是关于Oracle中case语句中数字0.5转换成字符串后为什么会变成.5的问题。我理解您的疑惑,这是因为Oracle默认情况下会将数字转换成最小精度的形式,也就是去掉前导0的形式,因此0.5在转换成字符串时会变成.5。如果您希望保留前导0,可以使用TO_CHAR函数,例如:
SELECT CASE WHEN 0.5 > 0 THEN TO_CHAR(0.5, 'FM0.0') ELSE '0' END FROM DUAL;
这样就可以得到字符串'0.5'。其中,'FM'是格式模型修饰符,用于去掉数字前面的空格。'0.0'是格式模型,用于指定数字的显示格式。
阅读全文