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 主 ...
随机推荐
- R语言数据的导入与导出
1.R数据的保存与加载 可通过save()函数保存为.Rdata文件,通过load()函数将数据加载到R中. > a <- 1:10 > save(a,file='d://data/ ...
- get提交
<?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action { //显示用户 public function index(){ $Use ...
- DM816x算法具体解释--之OSD
简单介绍: 本文介绍DM8168 DVRRDK中传入DSP内部的视频格式以及大概的处理流程. 背景: 可能有非常多人为了加快研发的速度.减少难度,选择在DVRRDk已有的OSD内加入自己的DSP算法. ...
- 【Java面试题】1 Java中使用switch-case的用法及注意事项超全总结
今天在用到switch的时候,这种设计到最基本的内容,可能忘记它的一些基本语法,出现了一些错误,所以即兴从各种资料查询总结了下面的内容,希望可以帮助那些正在困扰switch错误和各种细节问题的朋友! ...
- 系统管理员应该知道的20条Linux命令
如果您的应用程序不工作,或者您希望在寻找更多信息,这 20 个命令将派上用场. 在这个全新的工具和多样化的开发环境井喷的大环境下,任何开发者和工程师都有必要学习一些基本的系统管理命令.特定的命令和工具 ...
- jQuery-修改元素属性
1.attr方法 获取匹配的元素集合中的第一个元素的属性的值 或 设置匹配元素指定的属性 使用说明: 1)只传一个参数的情况: 1>字符串(属性名称) 只传一个字符串属性名称 表示获取匹配的元素 ...
- SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery)
SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery) 1.启用Ad Hoc Distributed Queries 在使用openrowset ...
- git 分支的创建、合并、删除
基本概念与命令 分支(branch):每次提交,Git都把提交的内容串成一条时间线,这条时间线就是一个分支 . git 分支的创建 git branch branchName git ...
- 51地图标注接口(EZMarker API)
功能 在很多时候,您需要您的用户标出一个位置,比如:一个房地产网站,用户在登记新楼盘的时候,就需要在地图上标出这个楼盘的位置,这个时候就可以用到本接口. 地图标注接口(EZMarker API)是我要 ...
- c# 实现javascript中的escape和unescape
我们在JS经常使用escape和unescape,其实C#也可以的. string s = "中文好伟大的"; Console.Write(Microsoft.JScript.Gl ...