mysql动态sql 整理多个字段
原始表:

整理后的表:

方案一(动态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 整理多个字段的更多相关文章
- MySQL常用SQL整理
MySQL常用SQL整理 一.DDL #创建数据库 CREATE DATABASE IF NOT EXISTS product DEFAULT CHARSET utf8 COLLATE utf8_ge ...
- Mysql动态sql语句,用当前时间做表名
在mysql备份操作中, 我们可能要使用表名和当前时间来做为备份表的名称,但是MySQL在存储过程中不支持使用变量名来做表名或者列名. 例如:有一个表"user",我需要备份一份, ...
- MySQL 动态sql语句运行 用时间做表名
1. 描写叙述 在使用数据的时候,我时候我们须要非常多数据库,并且想用时间来做表名以区分.可是MySQL在存储过程中不支持使用变量名来做表名或者列名. 比方,有一个表我们想以"2015-07 ...
- Mysql中用SQL增加、删除字段,修改字段名、字段类型、注释,调整字段顺序总结
转自:http://www.111cn.net/database/mysql/71648.htm 1.增加一个字段 代码如下 复制代码 //增加一个字段,默认为空 alter table user ...
- Java-Mybatis动态SQL整理
XML映射器 SQL映射文件的几个顶级元素: cache - 该命名空间的缓存配置 cache-ref - 引用其他命名空间的缓存配置 resultMap - 描述如何从数据库结果集中加载对象 sql ...
- DB2和MySQL常用SQL整理
1.Truncate删除表中所有数据 truncate table USER immediate; 说明:Truncate是一个能够快速清空资料表内所有资料的SQL语法.并且能针对具有自动递增值的字段 ...
- MYSQL: sql中某一个字段内容为用逗号分割的字符串转换成多条数据
场景: 表名:testsuer id name 1 小红,小李,李红,小法 要结果值为: 1 小红 1 小李 1 李红 1 小法 MYSQL函数解释 ...
- mysql下sql语句令某字段值等于原值加上一个字符串
MYSQL在一个字段值后面加字符串,如下: member 表名 card 字段名 update member SET card = '00' || card; (postgreSQL 用 || 来连贯 ...
- mysql 用sql 语句去掉某个字段重复值数据的方法
示例代码如下: create table tmp as select min(主键) as col1 from 去重表名 GROUP BY 去重字段; delete from 去重表名 where 主 ...
随机推荐
- AJAX 实时读取输入文本(php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 20 个 jQuery 和 CSS 的文本特效插件
Jumble Text Effect Plugins Demo || Download Vticker – Vertical News Ticker With JQuery Plugin Demo | ...
- [oracle] 系统权限管理
1 利用超级用户连接到数据库登录 sqlplus / as sysdba or slqplus SYS/SYSPWD as sysdba 这两个命令的效果是一样的,都是以sysdba的身份使得SYS管 ...
- MySQL,SQLSERVER,ORACLE获取数据库表名及字段名
1.MySQL 获取表名: 用“show tables”命令.在程序中也可以采用该命令获取,在返回的RowSet中的“Tables_in_db”读出来.其中“db”是指你的数据库的名称,比如说Tabl ...
- 比較JS合并数组的各种方法及其优劣
原文链接: Combining JS Arrays原文日期: 2014-09-09翻译日期: 2014-09-18翻译人员: 铁锚 本文属于JavaScript的基础技能. 我们将学习结合/合并两个 ...
- java中关于二进制的初步。
两个int型和一个long型的转换: long now=1368257088802L; int low = (int) (0xFFFFFFFFL & now) ...
- 你是否有遇到过某个实体类字段(属性)过多的情况,不想每次点的话戳进来(C# 反射)
贴上一段代码: bureaucraticEntities apply = new bureaucraticEntities(); Type tapp= app.GetType(); Type ttmp ...
- java bigDecimal and double
Java BigDecimal和double BigDecimal是Java中用来表示任意精确浮点数运算的类,在BigDecimal中,使用unscaledValue × 10-scale来表示一 ...
- HBase学习之深入理解Memstore-6
MemStore是HBase非常重要的组成部分,深入理解MemStore的运行机制.工作原理.相关配置,对HBase集群管理以及性能调优有非常重要的帮助. HBase Memstore 首先通过简 ...
- Python学习笔记(三)——迭代
知识点 迭代 迭代 什么是迭代呢?和递归又有什么区别呢? 根据维基百科和网上的资料: 迭代:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为一次“迭代”, ...