您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SQL如何实现行列转换
## 一、行列转换概述
行列转换(Pivot/Unpivot)是SQL中常见的数据重塑操作,主要用于以下场景:
- **行转列(Pivot)**:将多行数据聚合为单行的多个列
- **列转行(Unpivot)**:将多列数据展开为多行记录
## 二、行转列实现方案
### 1. 使用CASE WHEN + 聚合函数(通用方案)
```sql
SELECT
id,
MAX(CASE WHEN subject = '数学' THEN score END) AS math_score,
MAX(CASE WHEN subject = '语文' THEN score END) AS chinese_score,
MAX(CASE WHEN subject = '英语' THEN score END) AS english_score
FROM student_scores
GROUP BY id;
SELECT * FROM (
SELECT id, subject, score
FROM student_scores
) AS src
PIVOT (
MAX(score) FOR subject IN ([数学], [语文], [英语])
) AS pvt;
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN subject = ''', subject,
''' THEN score END) AS ', subject, '_score')
) INTO @sql
FROM student_scores;
SET @sql = CONCAT('SELECT id, ', @sql,
' FROM student_scores GROUP BY id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
SELECT id, '数学' AS subject, math_score AS score FROM student_scores
UNION ALL
SELECT id, '语文' AS subject, chinese_score AS score FROM student_scores
UNION ALL
SELECT id, '英语' AS subject, english_score AS score FROM student_scores;
SELECT id, subject, score
FROM student_scores
UNPIVOT (
score FOR subject IN (math_score, chinese_score, english_score)
) AS unpvt;
行列转换是SQL高级查询的重要技术,掌握后可以显著提高数据处理灵活性。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。