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