在 SQL 中,行转列是指将数据表中具有相同 key 值的多行 value 数据,转换为使用一个 key 值的多列数据,使每一行数据中,一个 key 对应多个 value。行转列完成后,在视觉上的效果就是:表中的总行数减少了,但是列数增加了。
行转列可以使用以下方法实现:
CASE WHEN 语句
使用 CASE WHEN 语句可以将数据表中具有相同 key 值的多行 value 数据转换为使用一个 key 值的多列数据。具体做法如下:
- SELECT
- key,
- CASE
- WHEN key = '语文' THEN value1
- WHEN key = '数学' THEN value2
- WHEN key = '英语' THEN value3
- END AS value
- FROM
- table;
-
这段 SQL 语句将将 table 表中具有相同 key 值的多行 value 数据转换为使用一个 key 值的多列数据,key 列为 key,value 列为 value1、value2、value3。
PIVOT 运算符
PIVOT 运算符可以将数据表中具有相同 key 值的多行 value 数据转换为使用一个 key 值的多列数据。具体做法如下:
- SELECT
- key,
- value
- FROM
- table
- PIVOT(
- SUM(value)
- FOR key IN ('语文', '数学', '英语')
- );
-
这段 SQL 语句将将 table 表中具有相同 key 值的多行 value 数据转换为使用一个 key 值的多列数据,key 列为 key,value 列为 value1、value2、value3。
GROUP BY 和 GROUP_CONCAT 函数
GROUP BY 和 GROUP_CONCAT 函数也可以实现行转列。具体做法如下:
- SELECT
- key,
- GROUP_CONCAT(value) AS value
- FROM
- table
- GROUP BY
- key;
-
这段 SQL 语句将将 table 表中具有相同 key 值的多行 value 数据转换为使用一个 key 值的多列数据,key 列为 key,value 列为 value1、value2、value3。
在实际开发中,可以根据具体的需求选择合适的方法实现行转列。