设为首页 收藏本站
查看: 657|回复: 0

[经验分享] 一个 mysql 行 转 列 的存储过程

[复制链接]

尚未签到

发表于 2016-10-19 02:09:04 | 显示全部楼层 |阅读模式
转一个mysql 行 转 列 的存储过程 DSC0000.gif DELIMITER$$

DROPPROCEDUREIFEXISTS`test`.`sp_row_column_wrap`$$

CREATEDEFINER=`root`@`localhost`PROCEDURE`sp_row_column_wrap`(IN$schema_namevarchar(64),
IN$table_namevarchar(64))
BEGIN
declarecntint(11);
declare$table_rowsint(11);
declareiint(11);
declarejint(11);
declaresint(11);
declarestrvarchar(255);
--Getthecolumnnumberofthetable
selectcount(1)frominformation_schema.columnswheretable_schema=$schema_nameandtable_name=$table_nameintocnt;
--Gettherownumberofthetable
selecttable_rowsfrominformation_schema.tableswheretable_schema=$schema_nameandtable_name=$table_nameinto$table_rows;
--Checkwhetherthetableexistsornot
droptableifexiststest.temp;
createtableifnotexiststest.temp(`1`varchar(255)notnull);
--loop1start
seti=0;
loop1:loop
ifi=$table_rows-1then
leaveloop1;
endif;
set@stmt1=concat('altertabletest.tempadd`',i+2,'`varchar(255)notnull');
prepares1from@stmt1;
executes1;
deallocateprepares1;
seti=i+1;
endlooploop1;
--loop1end;
sets=0;
--loop2start
loop2:loop
--leaveloop2
ifs=cntthen
leaveloop2;
endif;
set@stmt2=concat('selectcolumn_namefrominformation_schema.columnswheretable_schema="',$schema_name,
'"andtable_name="',$table_name,'"limit',s,',1into@temp;');
prepares2from@stmt2;
executes2;
deallocateprepares2;
setj=0;
setstr='select';
--Loop3start
loop3:loop
ifj=$table_rowsthen
leaveloop3;
endif;
set@stmt3=concat('select',@temp,'from',$schema_name,'.',$table_name,'limit',j,',1into@temp2;');
prepares3from@stmt3;
executes3;
setstr=concat(str,'"',@temp2,'"',',');
deallocateprepares3;
setj=j+1;
endlooploop3;
setstr=left(str,length(str)-1);
--insertnewdataintotable
set@stmt4=concat('insertintotest.temp',str,';');
prepares4from@stmt4;
executes4;
deallocateprepares4;
sets=s+1;
endlooploop2;
END$$

DELIMITER;


  以下是测试结果:
======
select * from a;
select * from b;
select * from salary;

call sp_row_column_wrap('test','a');
select * from test.temp;
call sp_row_column_wrap('test','b');
select * from test.temp;
call sp_row_column_wrap('test','salary');
select * from test.temp;
query result(2 records)
  
aidtitle
1111
2222
query result(3 records)
  
bidaidimagetime
121.gif2007-08-08
222.gif2007-08-09
323.gif2007-08-08
query result(7 records)
  
idcostdesAutoid
110aaaa1
115bbbb2
120cccc3
280aaaa4
2100bbbb5
260dddd6
3500dddd7
query result(2 records)
  
12
12
111222
query result(4 records)
  
123
123
222
1.gif2.gif3.gif
2007-08-082007-08-092007-08-08
query result(4 records)
  
1234567
1112223
1015208010060500
aaaabbbbccccaaaabbbbdddddddd
1234567


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287958-1-1.html 上篇帖子: 使用MySQL的全文检索实现Like索引 下篇帖子: mysql中GROUP BY结合GROUP_CONCAT的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表