动态利用游标 实现行转列

         我的工作主要是报表,也没有逻辑层,全部是靠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'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中可以使用sqlite数据库来实现通讯录管理程序,并且可以为其添加一个界面。 首先,我们需要导入sqlite模块,并连接到数据库。可以使用connect方法来连接到数据库文件,如果不存在则会创建一个新的数据库文件。然后,使用cursor方法创建一个游标对象,可以通过游标对象来执行SQL语句。 接下来,我们可以创建一个表来存储通讯录的信息。可以使用execute方法执行CREATE TABLE语句来创建表。在表中,可以定义不同的列来存储不同的字段,比如姓名、电话号码等。 之后,在界面中,可以通过输入信息的方式向数据库添加新的联系人。可以使用INSERT语句将联系人的信息插入到表中。可以使用execute方法执行SQL语句,并使用commit方法提交更改。 同时,我们还可以提供修改和删除联系人的功能。使用UPDATE语句可以修改表中的数据,通过设置WHERE条件来定位需要修改的联系人。使用DELETE语句可以删除表中的数据,也可以通过设置WHERE条件来定位需要删除的联系人。 最后,还可以提供查询功能。可以使用SELECT语句来从表中检索出符合条件的联系人信息。可以使用execute方法执行SELECT语句,并使用fetchall方法获取查询结果。 通过以上的步骤,我们可以完成一个利用sqlite数据库的通讯录管理程序,并且为其添加一个界面,用户可以通过界面来进行添加、修改、删除和查询联系人的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值