mysql中将列动态转换为行_Mysql查询动态地将行转换为列

您可以使用GROUP BY和MAX模拟数据透视。MySQL也支持IF声明。SELECT  ID,

MAX(IF(`order` = 1, data, NULL)) data1,

MAX(IF(`order` = 2, data, NULL)) data2FROM    TableAGROUP   BY ID

如果您有多个值order,则动态SQL可能更合适,因此您不必修改查询:SET @sql = NULL;SELECT

GROUP_CONCAT(DISTINCT

CONCAT(

'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)

) INTO @sqlFROM TableName;SET @sql = CONCAT('SELECT  ID, ', @sql, '

FROM    TableName

GROUP   BY ID');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;

两种查询的输出:

╔════╦═══════╦═══════╗

║ ID ║ DATA1 ║ DATA2 ║

╠════╬═══════╬═══════╣

║  1 ║ P     ║ S     ║

║  2 ║ R     ║ Q     ║

╚════╩═══════╩═══════╝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值