`

MySQL动态行转列_zhuang

阅读更多

网上的都是一些静态的,用CASE WHEN结构实现。所以我写了一个动态的。




SP 代码:

DELIMITER $$

DROP PROCEDURE IF EXISTS `test` . `sp_row_column_wrap` $ $

CREATE DEFINER= `root` @ `localhost` PROCEDURE `sp_row_column_wrap` ( IN $schema_name varchar ( 64) ,
IN $table_name varchar ( 64) )
BEGIN
  declare cnt int ( 11) ;
  declare $table_rows int ( 11) ;
  declare i int ( 11) ;
  declare j int ( 11) ;
  declare s int ( 11) ;
  declare str varchar ( 255) ;
  -- Get the column number of the table
  select count ( 1) from information_schema. columns where table_schema= $ schema_name and table_name= $ table_name into cnt;
  -- Get the row number of the table
  select table_rows from information_schema. tables where table_schema = $schema_name and table_name= $ table_name into $table_rows;
  -- Check whether the table exists or not
  drop table if exists test. temp;
  create table if not exists test. temp ( `1` varchar ( 255) not null ) ;
  -- loop1 start
  set i = 0;
  loop1:loop
    if i = $table_rows-1 then
      leave loop1;
    end if;
    set @ stmt1 = concat ( 'alter table test.temp add `' , i+ 2, '` varchar(255) not null' ) ;
    prepare s1 from @ stmt1 ;
    execute s1;
    deallocate prepare s1;
    set @stmt1 = '';
    set i = i + 1;
  end loop loop1;
  -- loop1 end;
  set s = 0;
  -- loop2 start
  loop2:loop
  -- leave loop2
    if s= cnt then
      leave loop2;
    end if;
    set @ stmt2 = concat ( 'select column_name from information_schema.columns where table_schema="' , $ schema_name,
                        '" and table_name="' , $ table_name, '" limit ' , s, ',1 into @temp;' ) ;
    prepare s2 from @ stmt2 ;
    execute s2;
    deallocate prepare s2;
    set @stmt2 = '';
    set j= 0;
    set str = ' select ' ;
    -- Loop3 start
    loop3:loop
      if j = $table_rows then
        leave loop3;
      end if;
      set @ stmt3 = concat ( 'select ' , @ temp , ' from ' , $ schema_name, '.' , $ table_name, ' limit ' , j, ',1 into @temp2;' ) ;
      prepare s3 from @ stmt3 ;
      execute s3;
      set str = concat ( str, '"' , @ temp2 , '"' , ',' ) ;
      deallocate prepare s3;
      set @stmt3 = '';
      set j = j+ 1;
    end loop loop3;
    set str = left ( str, length ( str) - 1) ;
    -- insert new data into table
    set @ stmt4 = concat ( 'insert into test.temp' , str, ';' ) ;
    prepare s4 from @ stmt4 ;
    execute s4;
    deallocate prepare s4;
    set @stmt4 = '';
    set s= s+ 1;
  end loop loop2;
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)

aid title
1 111
2 222

 

query result(3 records)

bid aid image time
1 2 1.gif 2007-08-08
2 2 2.gif 2007-08-09
3 2 3.gif 2007-08-08

 

query result(7 records)

id cost des Autoid
1 10 aaaa 1
1 15 bbbb 2
1 20 cccc 3
2 80 aaaa 4
2 100 bbbb 5
2 60 dddd 6
3 500 dddd 7

 

query result(2 records)

1 2
1 2
111 222

 

query result(4 records)

1 2 3
1 2 3
2 2 2
1.gif 2.gif 3.gif
2007-08-08 2007-08-09 2007-08-08


query result(4 records)

1 2 3 4 5 6 7
1 1 1 2 2 2 3
10 15 20 80 100 60 500
aaaa bbbb cccc aaaa bbbb dddd dddd
1 2 3 4 5 6 7
分享到:
评论

相关推荐

    zhuang_jdk_jre_jse7.7z

    本文将围绕"zhuang_jdk_jre_jse7.7z"这个压缩包文件,详细解析其中包含的Java开发工具包(JDK)与Java运行环境(JRE)的7u80版本,以及它们在Java生态系统中的重要角色。 1. JDK 7u80:Java Development Kit JDK...

    mysql5.5详解

    从给定的文件标题“mysql5.5详解”和描述“MySQL 5.5新特性详解及参数优化,好资料!!!!”,我们可以深入探讨MySQL 5.5版本中引入的重要特性和性能优化策略。 ### MySQL 5.5新特性 #### 1. **InnoDB作为默认...

    AN ZHUANG DAYIN JI

    ### AN ZHUANG DAYIN JI - 鬼影系统安装打印机解决方案 #### 知识点一:Ghost操作系统概述 - **定义与特点**:Ghost(General Hardware-Oriented System Transfer)是一种常用的系统备份和恢复工具,常用于快速...

    an-jian-zhuang-tai-ji.zip_JIAN

    本资源“an-jian-zhuang-tai-ji.zip_JIAN”提供了一个按键状态机函数的代码实现,旨在解决这个问题,确保软件在处理按键输入时能够准确无误。 按键抖动是由于按键按下或释放时,接触点瞬间的不稳定造成的。在物理上...

    SGM358L ROLLER HINGE LWR ce liang gong zhuang 2024.04.30 _1.stp

    SGM358L ROLLER HINGE LWR ce liang gong zhuang 2024.04.30 _1.stp

    zhuang-hao-ming#haoming-article#深圳市房屋建筑数据获取1

    介绍:天地图.深圳平台,发布了深圳市的多套基础数据。数据的精度和质量都非常高。平台包含了深圳市超过60万的建筑物数据,数据的质量非常高,不仅包含了建筑的foot

    CRC-3(MBUS-SPI)

    CRC3/MBUS,常用于SPI通讯数据校验,有效位3位。如美信MAX20092就用此方法。该算法适用于各种多项式(CRC3)根据多项式不同要进行变化,如有问题可以发邮箱到Larry_Zhuang@163.com,或者留言给我。

    数据库中的数据转为excel11.zip_python

    描述中的"mysql biaoge zhuang execl"可以理解为“MySQL表格转Excel”。 以下是对这个主题的详细阐述: 1. **Python数据库连接**: - `pymysql`:Python中常用的MySQL数据库连接库,可以用来执行SQL查询、获取...

    IAI an zhuang ruan jian

    IAI安装软件,好像是日文版。安装时可以选择语言! 内有日文,英文和中文!

    8-07-14_MegaCLI for linux_windows

    包含如下操作系统版本 FreeBSD Linux Solaris Windows 分别对应如下目录 MegaCLI for DOS MegaCLI for Linux MegaCLI for Solaris MegaCLI for FreeBSD MegaCLI for Windows ********************************...

    基于Java Swing&Mysql的图书管理系统

    《基于Java Swing&Mysql的图书管理系统》是一款使用Java编程语言中的Swing图形用户界面库,结合MySQL数据库系统开发的图书管理软件。这个项目旨在提供一个高效、易用且功能丰富的图书管理解决方案,对于学习Java GUI...

    JS关键字球状旋转效果的实例代码

    文章开始时指出,此效果是作者在浏览网页时发现的一种有趣的动态效果,遂决定自己动手实现它。接下来,文章提供了HTML、CSS和JavaScript代码,以及实现该效果所需的步骤和注意事项。 首先,HTML部分使用了`<div>`...

    ansys安装问题解决方案

    解决各种版本ansys安装问题,包括证书错误,打开后出现“The Ansys Flexm license manager service is not instaned"等问题

    assignment-2-michelle-zhuang:由GitHub Classroom创建的Assignment-2-michelle-zhuang

    【标题】"assignment-2-michelle-zhuang" 是一个在GitHub Classroom平台上创建的作业项目,由学生或用户Michelle Zhuang完成。这个项目可能是针对编程课程中的第二部分任务,通常涉及特定的技术主题和编程练习。 ...

    如何成为Layout高手

    ### 如何成为Layout高手 #### 一、工具与技能 要成为一名Layout高手,首先需要熟练掌握先进的EDA(电子设计自动化)工具。当前业界普遍使用的工具包括Allegro、WG(通常指的是Cadence OrCAD Capture/Cadence ...

    图像纹理分析

    比较新的图像多特征提取方法研究,博士论文。

    麒麟ARM平台向日葵sunloginclient-10.0.2.24779_kylin_arm64

    麒麟平台向日葵 dpkg --info ./sunloginclient-10.0.2.24779_kylin_arm64.deb | grep Depends Depends: libwebkit2gtk-4.0-37 依赖包: su apt install libwebkit2gtk-4.0-37

    sogo输入法细胞词库的解析源程序dis_sogo_cell.c 将细胞词库转为TXT

    chang ge zhuang cun ;常各庄村, chang he da sha ;长和大厦,长河大厦, 使用方法(Linux下): 1.编译:gcc dis_sogo_cell.c -o dis_sogo_cell 或直接make 2.使用:./dis_sogo_cell sogo_scel_file.scel > sogo_...

    zhuang-hao-ming#haoming-article#gdb调试初探1

    title: gdb调试初探用GDB调试程序(一)陈皓在这篇文章中概略地介绍了gdb的使用方法,总的来说有如下几步使用gcc的-g参数编译文件,是目标文件中带有

Global site tag (gtag.js) - Google Analytics