oracle 交叉表

在oracle的test表中插入记录
INSERTINTOtestvalues(N'张三',N'语文',60)

INSERTINTOtestvalues(N'李四',N'数学',70)

INSERTINTOtestvalues(N'王五',N'英语',80)

INSERTINTOtestvalues(N'王五',N'数学',75)

INSERTINTOtestvalues(N'王五',N'语文',57)

INSERTINTOtestvalues(N'李四',N'语文',80)

INSERTINTOtestvalues(N'张三',N'英语',100)
交叉表语句的实现:

--用于:交叉表的列数是确定的

selectname,sum(casesubjectwhen'数学'thensourceelse0end)as'数学',

sum(casesubjectwhen'英语'thensourceelse0end)as'英语',

sum(casesubjectwhen'语文'thensourceelse0end)as'语文'

fromtest

groupbyname
用oracle存储过程实现
CREATEORREPLACEPACKAGEBODY"TEST1"as

proceduresp_test(p_cursoroutt_cursor)

is
sqlstrvarchar2(32767);
begin
sqlstr:='selectname,';
--构造字符串
forv_curin(selectdistinctsubjectfromtest)
loop
sqlstr:=sqlstr||'sum(casesubjectwhen'''||v_cur.subject||'''thenscoreelse0end)as'||v_cur.subject||',';
endloop;



sqlstr:=substr(sqlstr,0,length(sqlstr)-1)||'fromtestgroupbyname';

openp_cursorforsqlstr;

end;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值