微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql怎么把行数据变为列

MysqL中,可以使用PIVOT操作将行数据转换为列。以下是一种常见的方法

首先,创建一个包含需要转换的数据的表。假设我们有一个名为data_table的表,包含三个字段:idcategoryvalue

CREATE@H_404_17@ TABLE@H_404_17@ data_table (
  id INT@H_404_17@,
  category VARCHAR@H_404_17@(50@H_404_17@),
  value@H_404_17@ INT@H_404_17@
);

INSERT@H_404_17@ INTO@H_404_17@ data_table (id, category, value@H_404_17@)
VALUES@H_404_17@
  (1@H_404_17@, 'A'@H_404_17@, 10@H_404_17@),
  (1@H_404_17@, 'B'@H_404_17@, 20@H_404_17@),
  (1@H_404_17@, 'C'@H_404_17@, 30@H_404_17@),
  (2@H_404_17@, 'A'@H_404_17@, 40@H_404_17@),
  (2@H_404_17@, 'B'@H_404_17@, 50@H_404_17@),
  (2@H_404_17@, 'C'@H_404_17@, 60@H_404_17@);

接下来,使用CASE语句和聚合函数将行数据转换为列。在这个例子中,我们将category字段的值作为列名。使用SUM函数value字段进行聚合。

SELECT@H_404_17@ 
  id,
  SUM@H_404_17@(CASE@H_404_17@ WHEN@H_404_17@ category =@H_404_17@ 'A'@H_404_17@ THEN@H_404_17@ value@H_404_17@ END@H_404_17@) AS@H_404_17@ A,
  SUM@H_404_17@(CASE@H_404_17@ WHEN@H_404_17@ category =@H_404_17@ 'B'@H_404_17@ THEN@H_404_17@ value@H_404_17@ END@H_404_17@) AS@H_404_17@ B,
  SUM@H_404_17@(CASE@H_404_17@ WHEN@H_404_17@ category =@H_404_17@ 'C'@H_404_17@ THEN@H_404_17@ value@H_404_17@ END@H_404_17@) AS@H_404_17@ C
FROM@H_404_17@ data_table
GROUP@H_404_17@ BY@H_404_17@ id;

运行以上查询将得到以下结果:

@H_502_184@
id A B C
1 10 20 30
2 40 50 60

上述查询使用了SUM函数来聚合每个category的值,并使用CASE语句将对应的值放在正确的列中。在GROUP BY子句中,我们按id分组。

这样,我们就成功将行数据转换为列数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐