mysql 值作为列名_mysql选择动态行值作为列名,另一列作为值

a36ff5496591a0447de50d3f6d05f792.png

慕的地10843

与其他一些RDBMS不同,MySQL本身不支持这种类型的旋转操作(开发人员认为它更适合于应用程序的表示,而不是数据库层)。如果你绝对必须在MySQL中进行这样的操作,那么构建一个准备好的语句是可行的 - 尽管不是乱用CASE,我可能只是使用MySQL的GROUP_CONCAT()函数:SELECT CONCAT(

  'SELECT `table`.id', GROUP_CONCAT('

     ,    `t_', REPLACE(name, '`', '``'), '`.value

         AS `', REPLACE(name, '`', '``'), '`'

     SEPARATOR ''),

 ' FROM `table` ', GROUP_CONCAT('

     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`

            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id

           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)

     SEPARATOR ''),

 ' GROUP BY `table`.id') INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;PREPARE stmt FROM @qry;EXECUTE stmt;在sqlfiddle上看到它。请注意,结果GROUP_CONCAT()受group_concat_max_len变量限制(默认值为1024字节:除非您有一些非常长的name值,否则此处不太可能相关)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值