本篇着重解决用MYSQL数据库将数据行与列相互转换进行查询,我将直接用实际的例子来讲解。
第一 将某列的分类数据转换成多列数据
掌握SUM(CASE WHEN column1=‘x’ THEN column2 END)
转换成
在MYSQL中将运用函数为case when then,代码如下:
SELECT
姓名
,
SUM( CASE WHEN 科目
= '语文' THEN 成绩
END ) AS 语文,
SUM( CASE WHEN 科目
= '数学' THEN 成绩
END ) AS 数学,
SUM( CASE WHEN 科目
= '英语' THEN 成绩
END ) AS 英语
FROM
成绩表
GROUP BY 姓名
;
记住一定要把GROUP BY 姓名
;语句加上,不然查询的结果只有一条数据;
第二 将多列的分类数据转换成“类别字段+数值字段”
掌握UNION ALL
依然用上个例子反推回去。
SELECT 姓名
, '语文' AS 科目,
SUM(语文
) AS 成绩
FROM 成绩表2
GROUP BY 姓名
UNION ALL
SELECT 姓名
, '数学' AS 科目,
SUM(数学
) AS 成绩
FROM 成绩表2
GROUP BY 姓名
UNION ALL
SELECT 姓名
, '英语' AS 科目,
SUM(英语
) AS 成绩
FROM 成绩表2
GROUP BY 姓名
记住一定要在‘语文’、‘数学’、‘英语’三个科目前添加英文状态下的单引号,不然科目这个字段出来的数据和成绩字段一样。