case when 行转列用法
时间: 2024-01-25 17:12:42 浏览: 18
在SQL中,可以使用CASE WHEN语句来实现行转列的功能。具体用法如下:
1. 简单CASE WHEN语句:
```sql
SELECT
column_name,
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE result
END AS new_column_name
FROM table_name;
```
其中,column_name是要进行判断的列名,value1、value2等是列中可能的值,result1、result2等是对应值的结果,new_column_name是新生成的列名。
2. 搜索CASE WHEN语句:
```sql
SELECT
column_name,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END AS new_column_name
FROM table_name;
```
其中,condition1、condition2等是要进行判断的条件,result1、result2等是对应条件的结果。
这样,通过使用CASE WHEN语句,可以根据不同的条件将行转换为列。
相关问题
case when列转行
根据提供的引用内容,case when是一种MySQL中的条件语句,用于根据条件返回不同的结果。而列转行是一种数据转换的方式,将原本在列中的数据转换为行中的数据。在MySQL中,可以使用case when语句实现列转行的功能。具体实现方法可以参考以下步骤:
1. 使用UNION ALL将多个SELECT语句的结果合并为一个结果集。
2. 在每个SELECT语句中使用case when语句,将需要转换的列作为条件,将对应的值作为结果。
3. 在每个SELECT语句中添加一个标识列,用于区分不同的行。
4. 在最外层的SELECT语句中使用GROUP BY语句,将结果按照标识列进行分组。
这样就可以将原本在列中的数据转换为行中的数据了。例如,假设有一个表格包含学生姓名和成绩,需要将成绩转换为行中的数据,可以使用以下SQL语句:
```
SELECT '语文' AS subject,
MAX(CASE WHEN name = '张三' THEN score ELSE NULL END) AS '张三',
MAX(CASE WHEN name = '李四' THEN score ELSE NULL END) AS '李四',
MAX(CASE WHEN name = '王五' THEN score ELSE NULL END) AS '王五'
FROM scores
UNION ALL
SELECT '数学' AS subject,
MAX(CASE WHEN name = '张三' THEN score ELSE NULL END) AS '张三',
MAX(CASE WHEN name = '李四' THEN score ELSE NULL END) AS '李四',
MAX(CASE WHEN name = '王五' THEN score ELSE NULL END) AS '王五'
FROM scores
UNION ALL
SELECT '英语' AS subject,
MAX(CASE WHEN name = '张三' THEN score ELSE NULL END) AS '张三',
MAX(CASE WHEN name = '李四' THEN score ELSE NULL END) AS '李四',
MAX(CASE WHEN name = '王五' THEN score ELSE NULL END) AS '王五'
FROM scores
GROUP BY subject;
```
这个SQL语句将成绩表格中的数据按照学科和学生进行了转换,将每个学生在不同学科下的成绩转换为了行中的数据。
ORACLE行转列的方法
Oracle行转列的方法有多种,以下是其中的一些:
1. 使用PIVOT函数:PIVOT函数是Oracle 11g及以上版本中提供的用于行转列的函数,可以将行数据转换为列数据。例如,将每个部门的员工数量转换为各个部门的列,可以使用以下代码:
```sql
SELECT *
FROM (
SELECT department, employee_count
FROM employee
)
PIVOT (
SUM(employee_count)
FOR department IN ('Sales', 'Marketing', 'Operations')
);
```
2. 使用CASE语句:CASE语句可以根据条件将行数据转换为列数据。例如,将每个部门的员工数量转换为各个部门的列,可以使用以下代码:
```sql
SELECT
SUM(CASE WHEN department = 'Sales' THEN employee_count ELSE 0 END) AS Sales,
SUM(CASE WHEN department = 'Marketing' THEN employee_count ELSE 0 END) AS Marketing,
SUM(CASE WHEN department = 'Operations' THEN employee_count ELSE 0 END) AS Operations
FROM employee;
```
3. 使用UNPIVOT函数:UNPIVOT函数可以将列数据转换为行数据。例如,将各个部门的员工数量转换为部门和员工数量的行,可以使用以下代码:
```sql
SELECT department, employee_count
FROM (
SELECT 'Sales' AS department, Sales AS employee_count,
'Marketing' AS department, Marketing AS employee_count,
'Operations' AS department, Operations AS employee_count
FROM (
SELECT
SUM(CASE WHEN department = 'Sales' THEN employee_count ELSE 0 END) AS Sales,
SUM(CASE WHEN department = 'Marketing' THEN employee_count ELSE 0 END) AS Marketing,
SUM(CASE WHEN department = 'Operations' THEN employee_count ELSE 0 END) AS Operations
FROM employee
)
)
UNPIVOT (
employee_count FOR department IN ('Sales', 'Marketing', 'Operations')
);
```