一个MySQL行转列的动态存储过程

zfy3042 2020-10-26 12:19:03
以下是我写的一个根据SQL查询结果动态行转列的SQL语句,现在我遇到一个问题,如何动态的从结果里将指定的列的数据转换成行数据。“CallType”现在是一个静态字段,可以运行成功,但是我需要将CallType转换为columnname

BEGIN

drop table if exists temptable1;

Set @sq1=CONCAT('Create table temptable1(',sqlstr,')');
PREPARE stmt1 FROM @sq1;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

SET @EE='';

SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(IF(b.', columnname ,' = ''',CallType,''', b.',rowname,', 0)) AS ''', CallType, '''')
) into @EE
FROM temptable1 c;

select @EE;
-- SELECT
-- GROUP_CONCAT(DISTINCT
-- CONCAT(
-- 'SUM(IF(b.''',columnname,''' = ''',
-- c.CallType,
-- ''', b.cc, 0)) AS ''',
-- c.CallType, ''''
-- )
-- ) into @EE
-- FROM reportcall c;




SET @QQ = CONCAT('select ',@EE,' from temptable1 b ',sort );
SELECT @QQ;
PREPARE stmt FROM @QQ;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
...全文
220 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfy3042 2020-10-28
  • 打赏
  • 举报
回复
引用 1 楼 AHUA1001 的回复:
没有表结构,说说你想要什么吧。
就是想写一个MySQL的存储过程,将任何的SQL查询结果中的指定某列的数据为基准,进行行转列.
AHUA1001 2020-10-27
  • 打赏
  • 举报
回复
没有表结构,说说你想要什么吧。

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧