`

动态利用游标 实现行转列

阅读更多

         我的工作主要是报表,也没有逻辑层,全部是靠SQL 来实现功能,行转列,列转行.现在给大家分享一下,看看有没有更好的方法啊!
alter procedure corss 
 @strTabName varchar(50), --表名  
 @strCol varchar(50), --列名  
 @strGroup varchar(50),  --分组字段  
 @strNumber varchar(50), --被统计的字段  
 @strSum varchar(10)='Sum', --运算方式
 @term_str varchar(100)='where rkey=1' --提交语句   
 as 
 declare @strSql varchar(8000),@strTempCol varchar(100) 
 execute('declare corss_cursor cursor for select distinct'+@strCol+'from'+@strTabName+@term_str+'for read only') --生成游标  
begin 
set nocount on 
set @strSql='select'+@strGroup+','+@strSum+'('+@strNumber+') as ['+@strNumber+']' --查询的前半段  
open corss_cursor 
while(0=0) 
begin 
 fetch next from corss_cursor --遍历游标,将列头信息放入变量@strTempCol  
into @strTempCol 
 if(@@fetch_status<>0)break 
 set @strSql=@strSql+','+@strSum+'(case'+@strCol+'when'''+@strTempCol+'''then'+@strNumber+'else null end)as ['+@strTempCol+']'--gz查询  
  end 
 set @strSql=@strSql+'from'+@strTabName+'group by'+@strGroup --构造查询  
--PRINT @strSql
execute(@strSql) 
if @@error<>0 return @@error --如果出错,返回错误代码  
close corss_cursor 
 deallocate corss_cursor return 0 --释放游标,返回0表示成功  
end 
 
exec corss ' DATA0060 ',' day(ENT_DATE) ',' day(ENT_DATE) ',' PARTS_ORDERED ','SUM',' WHERE DATEDIFF(YEAR,ENT_DATE,GETDATE())=0'

分享到:
评论

相关推荐

    用SQL实现统计报表中的小计与合计的方法详解

    2.游标实现。 优点:思路逻辑简洁。 缺点:复杂和低效。3.利用临时表。 优点:思路逻辑简洁,执行效率高。SQL实现简单。 缺点:数据量大时耗用内存. 综合三种情况,决定“利用临时表”实现。实现效果原始表TB ...

    精通SQL 结构化查询语言详解

    8.3.2 GROUP BY子句根据多列组合行  8.3.3 ROLLUP运算符和CUBE运算符  8.3.4 GROUP BY子句中的NULL值处理  8.3.5 HAVING子句  8.3.6 HAVING子句与WHERE子句  8.3.7 SELECT语句各查询子句总结  第9章 ...

    精通sql结构化查询语句

    11.2.4 更新全部数据 11.2.5 利用子查询更新数据 11.2.6 通过视图更新表数据 11.3 数据的删除操作 11.3.1 DELETE语句的语法结构 11.3.2 删除指定行的数据 11.3.3 删除所有数据 11.3.4 通过视图删除表数据 11.3.5 ...

    精通SQL--结构化查询语言详解

    8.3.2 group by子句根据多列组合行 150 8.3.3 rollup运算符和cube运算符 151 8.3.4 group by子句中的null值处理 153 8.3.5 having子句 153 8.3.6 having子句与where子句 154 8.3.7 select语句各查询子句总结 ...

    oracle数据库经典题目

    (1)声明游标,使用查询来定义游标的列和行 (2)打开游标,使用PL/SQL命令OPEN来打开一个声明的游标 (3)提取数据,从游标中重复提取每条记录到数据结构中,直到数据集合被提交 (4)关闭游标,使用完游标后将其关闭 3....

    Oracle.11g.从入门到精通 (1/2)

    9.4 合理利用存储空间 9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和恢复 ...

    Oracle.11g.从入门到精通 (2/2)

    9.4 合理利用存储空间 9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和恢复 ...

    Oracle11g从入门到精通

    9.4 合理利用存储空间 9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和...

    Oracle11g从入门到精通2

    9.4 合理利用存储空间 9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑...

    Python Cookbook

    7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API模块的单参数传递风格 306 7.17 通过ADO使用Microsoft Jet 308 7.18 从Jython Servlet访问JDBC数据库 310 ...

    SQL必知必会(第3版)--详细书签版

    但是,因为所有SQL实现并不都是相同的,所以本书介绍的SQL主要适用于以下系统(需要时会给出特定的说明和注释):  IBM DB2;  Microsoft Access;..  Microsoft SQL Server;  MySQL;  Oracle;  PostgreSQL...

    SQL培训第一期

    伪列不是表的真实列,但是你可以象使用真实列一样使用伪列,常用伪列:rowid行的绝对物理编号,每一行是唯一的。rownum序号,返回查询结果的每行序号。系统时间sysdate,返回系统当前时间。 2.1.4.2 伪表 select * ...

    JAVA面试题最全集

    动态游标与静态游标的区别? 84.dotnet由哪几个基本框架组成? 85.Oracle中SGA是什么? 86.web servers是什么? 87.UNIX中QT是什么意思? 88.在软件开发生命周期中的哪个阶段开始测试? 89.dotnet与J2EE的比较? 90....

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据定义语言Data Definition Language(DDL),用来建立数据库、数据对象和定义其列。例如:CREATE、DROP、ALTER等语句。  数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以...

    net学习笔记及其他代码应用

    通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 [Page] 39.启动一个线程是用run()还是start()? 答:启动一个线程是调用start()方法,使...

    Linux操作系统基础教程

    行直接的安装。 Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux Torvalds (Torvalds@kruuna.helsinki.fi)写了 Linux核心程序的 0.02 版开始的,但其后的发展却几乎都 是由互联网上的 Linux社团(Linux ...

Global site tag (gtag.js) - Google Analytics