原始表:

整理后的表:

方案一(动态sql):

BEGIN
#Routine body goes here...
DECLARE v1 int();
DECLARE v2 int();
#DECLARE v3 VARCHAR(); #DECLARE vcompany VARCHAR();
#DECLARE vname VARCHAR(); DECLARE vcol VARCHAR();
DECLARE tmp_sql VARCHAR();
DECLARE vid int(); set v1 = ;
WHILE v1 <= DO
set v2=;
#if v2 <=27 THEN
WHILE v2 <= DO set @v3=CONCAT('l',v2);
set @vcompany='';
set @vname='';
#set @vid=''; SET @l_sql=CONCAT_ws(' ',
'select company_name,',@v3,
'into @vcompany,@vname',
'from for_xun_cha where id =',v1);
SET @sql=@l_sql;
prepare stmt from @sql;
execute stmt; #select company_name,l2 into vcompany,vname from for_xun_cha where id=v2;
if LENGTH(trim(@vname)) > THEN
INSERT into tmp(company,name) VALUES(@vcompany,@vname);
#INSERT into tmp(company,name) VALUES(vcompany,tmp_sql);
end if;
set v2 = v2+;
#end if;
end WHILE;
set v1 = v1 + ;
END WHILE; END

方案二(先合并各列,再用游标处理):

BEGIN
DECLARE Done INT DEFAULT ;
DECLARE n int ; -- 最大列
DECLARE companyName VARCHAR() ;-- 公司名称
DECLARE personNames VARCHAR();-- 员工名称
DECLARE personName VARCHAR(); DECLARE _cur CURSOR FOR select company_name ,CONCAT_WS(",",l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,l13,l14,l15,l16,l17,l18,l19,l20,l21,l22,l23,l24,l25,l26,l27) from for_xun_cha; OPEN _cur;
FETCH _cur INTO companyName,personNames;
REPEAT
IF NOT Done THEN
test: WHILE(n<=) DO
set personName=SUBSTRING_INDEX(SUBSTRING_INDEX(personNames,',',n),',',-);
if ISNULL(personName) || LENGTH(trim(personName))< THEN
LEAVE test;
ELSE
INSERT INTO temp1 VALUES (companyName,personName);
END IF;
set n=n+;
end while;
end IF;
set n = ;
FETCH NEXT FROM _cur INTO companyName,personNames;
UNTIL Done END REPEAT; -- set personName="";
-- set personNames="";
CLOSE _cur;
END

mysql动态sql 整理多个字段的更多相关文章

  1. MySQL常用SQL整理

    MySQL常用SQL整理 一.DDL #创建数据库 CREATE DATABASE IF NOT EXISTS product DEFAULT CHARSET utf8 COLLATE utf8_ge ...

  2. Mysql动态sql语句,用当前时间做表名

    在mysql备份操作中, 我们可能要使用表名和当前时间来做为备份表的名称,但是MySQL在存储过程中不支持使用变量名来做表名或者列名. 例如:有一个表"user",我需要备份一份, ...

  3. MySQL 动态sql语句运行 用时间做表名

    1. 描写叙述 在使用数据的时候,我时候我们须要非常多数据库,并且想用时间来做表名以区分.可是MySQL在存储过程中不支持使用变量名来做表名或者列名. 比方,有一个表我们想以"2015-07 ...

  4. Mysql中用SQL增加、删除字段,修改字段名、字段类型、注释,调整字段顺序总结

    转自:http://www.111cn.net/database/mysql/71648.htm 1.增加一个字段  代码如下 复制代码 //增加一个字段,默认为空 alter table user ...

  5. Java-Mybatis动态SQL整理

    XML映射器 SQL映射文件的几个顶级元素: cache - 该命名空间的缓存配置 cache-ref - 引用其他命名空间的缓存配置 resultMap - 描述如何从数据库结果集中加载对象 sql ...

  6. DB2和MySQL常用SQL整理

    1.Truncate删除表中所有数据 truncate table USER immediate; 说明:Truncate是一个能够快速清空资料表内所有资料的SQL语法.并且能针对具有自动递增值的字段 ...

  7. MYSQL: sql中某一个字段内容为用逗号分割的字符串转换成多条数据

    场景: 表名:testsuer id     name 1       小红,小李,李红,小法 要结果值为: 1     小红 1     小李 1     李红 1     小法 MYSQL函数解释 ...

  8. mysql下sql语句令某字段值等于原值加上一个字符串

    MYSQL在一个字段值后面加字符串,如下: member 表名 card 字段名 update member SET card = '00' || card; (postgreSQL 用 || 来连贯 ...

  9. mysql 用sql 语句去掉某个字段重复值数据的方法

    示例代码如下: create table tmp as select min(主键) as col1 from 去重表名 GROUP BY 去重字段; delete from 去重表名 where 主 ...

随机推荐

  1. kettle的jndi的使用

    kettle可以使用jdbc的方式设置job或者tansform的数据库连接,但是,同时它也支持JNDI方式连接数据库,后者更加方便,只需要配置一份配置文件就可以了,不用每个DBConnection都 ...

  2. ThinkPHP3.2 分组分模块

    ThinkPHP/Conf/convention.php 'CONTROLLER_LEVEL'      =>  1, 修改成 'CONTROLLER_LEVEL'      =>  2,

  3. hadoop学习WordCount+Block+Split+Shuffle+Map+Reduce技术详解

    转自:http://blog.csdn.net/yczws1/article/details/21899007 纯干货:通过WourdCount程序示例:详细讲解MapReduce之Block+Spl ...

  4. ubuntu之Matlab安装

    (清华大学校内适用) 1.首先下载Matlab镜像:http://its.tsinghua.edu.cn/column/jsrj/1,一共有两个ios文件. 2.然后执行 cd ~ mkdir mat ...

  5. (转)loff_t *ppos是什么东东

    ssize_t generic_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos) 这是一个文件读函数 我们很容 ...

  6. cmd命令行编码设置

    cmd窗口情况下:windows下cmd默认的编码是GBK 想在windows下查看sqlite的utf-8中文需要先 执行chcp 65001把当前页换为utf-8编码 chcp 命令: chcp ...

  7. 利用Graphviz 可视化GO 数据库

    GO是一个同源蛋白的数据库,按照三大类别BP(生物学过程), MF(分子功能), CC(细胞组分) 对基因的产物-蛋白质进行了分类: 在GO数据库中,本质上是一个有向无环图的数据结构,在三大类别之下, ...

  8. 《C++ Without Fear》 第1章 第一个C++程序

    机器码,CPU的“母语”,每条计算机指令就是一个由1和0构成的独一无二的组合(或代码). endl是“endl line”的缩写,所以它应该念作“end ELL”而不是“end ONE”.

  9. 【Java面试题】35 List, Set, Map是否继承自Collection接口?

    Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法. Set 和List 都继承了Conllection:Set具有与Collection完全一样的接 ...

  10. 【python】多进程多线程

    import threading import multiprocessing class MultiThread(threading.Thread): def __init__(self,func, ...