首页 / MYSQL / mysql中的行到列转换
mysql中的行到列转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql中的行到列转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1648字,纯文字阅读大概需要3分钟。
内容图文
![mysql中的行到列转换](/upload/InfoBanner/zyjiaocheng/892/24ec967fa0984d8aad2ca50ea5c58b2a.jpg)
下面是我的表结构,我想将其转换为另一种格式(从行到列类型)我已经尝试了很多,但我无法这样做.
StudentID | Mark | Subject
-------------------------
10 |46 |Java
--------------------------
10 |65 |C#
--------------------------
10 |79 |JavaScript
---------------------------
11 |66 |Java
--------------------------
11 |85 |C#
--------------------------
11 |99 |JavaScript
--------------------------
O / P应该是:
StudentID | Java | C# | JavaScript
---------------------------------
10 | 46 | 65 | 79
---------------------------------
11 | 66 | 85 | 99
-------------------------------
解决方法:
这种类型的数据转换称为数据转换. MySQL没有pivot函数,因此您需要使用带有CASE表达式的聚合函数来转换数据.
如果您提前知道变换的值,那么您可以对它们进行硬编码,类似于:
select studentid,
sum(case when subject = 'Java' then mark else 0 end) Java,
sum(case when subject = 'C#' then mark else 0 end) `C#`,
sum(case when subject = 'JavaScript' then mark else 0 end) JavaScript
from yourtable
group by studentid
如果主题的值未知或灵活,那么您可能希望使用预准备语句来生成动态sql:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(case when subject = ''',
subject,
''' then mark else 0 end) AS `',
subject, '`'
)
) INTO @sql
FROM yourtable;
SET @sql = CONCAT('SELECT studentid, ', @sql, '
from yourtable
group by studentid');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
两个查询的结果是:
| STUDENTID | JAVA | C# | JAVASCRIPT |
--------------------------------------
| 10 | 46 | 65 | 79 |
| 11 | 66 | 85 | 99 |
内容总结
以上是互联网集市为您收集整理的mysql中的行到列转换全部内容,希望文章能够帮你解决mysql中的行到列转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。