mysql 列转成行,在MySQL中将行数据转换为列

我有以这种格式存储数据的MySQL表

Type|Month|Count

----+-----+-------

1 |9 |4

3 |9 |7

99 |9 |2

1 |10 |6

3 |10 |7

99 |10 |9

.......

类型列可容纳3个值1,3,99中的任何一个.

一个月的值将介于1到12之间.

计数可以是随机的.

我想要的输出是这样的:

Month|Type1|Type3|Type99

-----+-----+-----+-------

9 |4 |7 |2

10 |6 |7 |9

................

我遇到了this演示,但对此并不太了解.

这是带有演示数据的样本fiddle.

任何帮助表示赞赏.

解决方法:

在下面的查询中尝试,您所需要的被称为MYSQL枢轴,下面的查询解决了您的问题

静态方式

SELECT Month,

SUM(CASE WHEN Type = 1 THEN 'count' ELSE 0 END) AS Type1,

SUM(CASE WHEN Type = 3 THEN 'count' ELSE 0 END) AS Type3,

SUM(CASE WHEN Type = 99 THEN 'count' ELSE 0 END) AS Type99

FROM my_table

GROUP BY Month

动态方式

SET @sql = NULL;

SELECT

GROUP_CONCAT(DISTINCT

CONCAT('SUM(CASE WHEN Type= ',

Type, ' THEN count ELSE 0 END) AS '

, 'Type', Type))

INTO @sql

FROM

my_table;

SET @sql = CONCAT('SELECT Month, ', @sql, '

FROM my_table

GROUP BY Month');

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

标签:mysql

来源: https://codeday.me/bug/20191121/2049704.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值