動態利用游標 實現行轉列

2021-09-01 22:34:36 字數 1461 閱讀 9065

我的工作主要是報表,也沒有邏輯層,全部是靠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實現行轉列

需求 用sql實現行轉列。如下圖所示 行顯示的資料轉換成列顯示 實現行轉列的sql指令碼如下 select date format last day date format now y m d y m d as 業務日期,max case index code when ind20101001 th...

Mysql實現行轉列

create table loc loc varchar 50 xiaoqu varchar 50 addr varchar 50 company varchar 50 插入資料 區域 小區名稱 房屋位址 中介公司寶山 慶安三村 綏化路52弄a寶山 月浦十村 月浦十村67號b寶山 盛橋三村 盛橋三村...

pandas實現行轉列

hive進行大資料分析資料經常用到行轉列,pandas也可以的。不解釋直接上 coding utf 8 import pandas as pd c df pd.dataframe c print df df left df key df values 0 df values str.split ex...