在网上找了些资料,自己动手写了个行列转换的存储过程。
下面片段为表结构:
CREATE TABLE `changeprice` (
`id` bigint(20) NOT NULL auto_increment,
`sid` bigint(20) NOT NULL,
`datecreated` Date NOT NULL default CURRENT_TIMESTAMP,
`price` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
表中插入以下数据:
(1,1,'2009-05-08','30'),
(2,1,'2009-05-10','50'),
(3,1,'2009-05-11','12'),
(4,1,'2009-05-12','20'),
(5,1,'2009-05-14','50'),
(6,1,'2009-05-15','30'),
(7,3,'2009-05-11','12'),
(8,3,'2009-05-12','30'),
(9,3,'2009-05-14','50'),
(10,3,'2009-05-15','30'),
(11,2,'2009-05-08','30'),
(12,2,'2009-05-09','50'),
(13,2,'2009-05-11','12'),
(14,2,'2009-05-13','20'),
(15,2,'2009-05-14','50'),
(16,2,'2009-05-15','30');
现要显示为:
sid,5-8,5-9,5-10,5-11,5-12...
1, 30, 0, 50,12, 20 ...
2, 30, 50, 0, 12, 0 ...
3, 0, 0, 0, 0, 12 ...
采用mysql存储过程加上cursor实现。
create procedure test111()
begin
DECLARE done int default 0;
DECLARE strDate DATE;
DECLARE str CHAR(1000) default '';
DECLARE cur1 CURSOR FOR select DISTINCT(DATE(datecreated)) from changeprice order by datecreated;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
open cur1;
REPEAT
if not done then
FETCH cur1 INTO strDate;
set str=CONCAT(str, ',', 'SUM(if(datecreated=''', strDate, ''', price, 0))', '''', strDate,'''');
end IF;
UNTIL done END REPEAT;
set @sqlString=CONCAT(' select sid ', str, ' from changeprice group by sid ');
prepare sqlstmt from @sqlString;
execute sqlstmt;
deallocate prepare sqlstmt;
end
分享到:
相关推荐
MySQL 动态行转列是指将数据库中的一行数据转换为多列数据的过程。在本示例中,我们将创建一个存储过程来实现动态行转列,用于从数据库中提取指定学生的成绩信息。 描述解释 MySQL 数据库中存在一个问题,即如何将...
在MySQL中,我们可以创建自定义的存储过程来执行复杂的数据处理任务,比如行列转换。 对于"列转行",一个常见的应用场景是处理交叉表(也称作透视表)。交叉表允许我们将数据按照多个维度进行展示,比如在一个销售...
在MySQL中,行列转换是一种常见的数据处理需求,特别是在数据分析和报表生成时。列联表(Cross Tabulation)和交叉表(Pivot Table)是这种转换的两种术语,它们用于将行数据转换为列数据,或者反之。在描述的场景中...
【标题】"poi解析jsp上传的excel文件并导入mysql(支持xls和xlsx)优化版"主要涉及了两个关键技术和一个优化点。首先,POI是Apache软件基金会的Java API,用于处理Microsoft Office格式的文件,如Excel。在这个场景...
**1.4 MySQL表的行列说明** - **行:** 表中的每一行代表一条完整的记录。 - **列:** 每一列代表数据的一个属性,例如姓名、年龄等。 - **主键:** 一个表可以有一个或多个主键,用于唯一标识每条记录。 **1.5 ...
MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2统计字段值的数目 82 4.1.3 计算字段的平均值 83 4.1.4 计算字段值的和 84 4.1.5 计算字段值的极值 84 4.1.6 总结 86 4.2 操作...
在数据库管理与数据分析领域,有时我们需要对表格中的数据进行特殊的处理,例如将行转换为列或将列转换为行,这样的操作被称为“行列互换”。这种需求通常出现在汇总报告、数据透视等场景下。本文将详细介绍如何在...
"sql.rar_SQL 脚本"这个压缩包文件显然是一个关于SQL脚本的资源,其中包含了"sql.txt"这样一个文本文件,很可能存储了关于行列转换的具体示例或者解决方案。 在SQL中,行列转换通常是为了适应不同的数据展示需求,...
本篇文章将针对"实际工作中常用sql积累及总结"进行深入探讨,涵盖事务处理、游标、存储过程、行列转换、递归查询、数据库备份与还原、分布式查询、批量更新、合并记录以及动态SQL等多个关键知识点。 1. **事务处理*...
在MySQL中,有时候我们需要将原本存储为列的数据转换为行的形式进行展示,这种操作被称为“行列转换”或“Pivot”。在本示例中,我们将详细介绍如何通过SQL语句实现这个功能,特别是在处理时间序列数据时,如按年份...
MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2统计字段值的数目 82 4.1.3 计算字段的平均值 83 4.1.4 计算字段值的和 84 4.1.5 计算字段值的极值 84 4.1.6 总结 86 4.2 操作...
以上就是对SQL操作技巧的一些详细解读,包括全局变量的使用、数据交换的方法、存储过程实现翻页、行列转换的技巧、视图的创建以及分页和删除重复数据的策略。熟练掌握这些知识点,对于日常的SQL编程和数据库管理都将...
tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/...
在SQL中,将列值转变为列的操作通常被称为“PIVOT”操作,或者称为行列转换。这个过程可以将数据表中的行数据转换为列数据,从而使得数据分析更加方便。在MySQL中,由于不直接支持PIVOT函数,我们需要通过一些技巧来...
- **详细解释:** 触发器是MySQL中的一种特殊存储过程,可以在特定的操作(如插入、更新或删除数据)发生时自动执行。在INSERT触发器中,NEW关键字代表即将被插入的新行数据,而OLD关键字则不适用于INSERT触发器。 #...
在实际应用中,SQL的使用非常广泛,其中包括行列转换、分页和树状结构数据操作。行列转换多用于生成报表;分页技术则常用于从大量数据中抽取部分内容显示,提高用户界面的响应速度;树状结构的数据操作则常见于处理...
行列转换是指将数据库表中的行转换为列,或者将列转换为行。行转列可以用于将多行数据合并成一行,列转行可以用于将一行数据拆分成多行。 分组后的 TOP N 分组后的 TOP N 是指在分组后的结果集中选取前 N 条记录。...
│ │ 7.2.4 使用系统存储过程实现的通用分页存储过程.sql │ │ 7.3.1 实现随机分页的通用分页存储过程.sql │ │ 7.3.2 根据分类表实现的分页存储过程.sql │ │ │ └─其他 │ sp_cursor.sql │ 基本方法.sql ...
- FastReport支持多种数据源,包括数据库(如SQL Server、MySQL、Oracle等)、XML文件、Excel文件以及自定义的数据提供者。 - 示例中可能包含如何配置数据源,连接数据库,并将数据绑定到报表的步骤。 3. **脚本...