求一高效sql

cc59 2004-08-11 04:33:28
表中有这样的四条纪录
横向编号 纵向编号 交叉点的值
A C 1.0
B D 2.0
A D 3.0
B C 4.0
能不能用一条sql的到下边的结果
A B
C 1.0 4.0
D 3.0 2.0
...全文
147 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyi8903 2004-08-12
  • 打赏
  • 举报
回复
create table AA
(
HJD VARCHAR2(10),
SJD VARCHAR2(10),
JCD NUMBER
);


insert into AA (HJD, SJD, JCD)
values ('A', 'D', 1);
insert into AA (HJD, SJD, JCD)
values ('B', 'D', 2);
insert into AA (HJD, SJD, JCD)
values ('C', 'D', 3);
insert into AA (HJD, SJD, JCD)
values ('A', 'E', 4);
insert into AA (HJD, SJD, JCD)
values ('B', 'E', 5.1);
insert into AA (HJD, SJD, JCD)
values ('C', 'E', 6.2);
insert into AA (HJD, SJD, JCD)
values ('A', 'F', .6);
insert into AA (HJD, SJD, JCD)
values ('B', 'F', .8);
insert into AA (HJD, SJD, JCD)
values ('C', 'F', .3);
commit;


创建存储过程返回动态组合的sql;
create or replace procedure P_ATEST(
as_sql out varchar2
)is


type v_cursor is ref cursor;
v_cur v_cursor;
v_hjd varchar2(100);
v_str varchar2(300);
v_spa varchar2(10);
v_sgn varchar2(10);
v_sql varchar2(40);
v_tmp varchar2(4000);
begin
v_sql := 'select sjd ';
v_str :='';
v_spa := ' ';
v_sgn := ',';
open v_cur for
select distinct HJD from AA;
loop
fetch v_cur into v_hjd;
exit when v_cur%notfound;
v_str := v_str||v_sgn||'sum(decode(hjd,'''||v_hjd||''',jcd)) as '||v_hjd||' ';
end loop;
v_tmp := v_sql||v_str||' FROM aa GROUP BY sjd';
as_sql :=v_tmp;
close v_cur;

end P_ATEST;
dinya2003 2004-08-12
  • 打赏
  • 举报
回复
行数不确定的不好直接用sql来实现.
zonelive 2004-08-11
  • 打赏
  • 举报
回复
关注
cc59 2004-08-11
  • 打赏
  • 举报
回复
谢谢各位:)
如果不用函数能实现吗?
cc59 2004-08-11
  • 打赏
  • 举报
回复
行数不确定
daihaidong 2004-08-11
  • 打赏
  • 举报
回复
同意,这只是针对楼主提出的例子.
可以在程序里动态生成这个语句.
liuyi8903 2004-08-11
  • 打赏
  • 举报
回复
楼上的方法在行数固定的情况下是可以.但是在行数不可预知的话,就不行了.那样的话就需要写函数来实现了.
daihaidong 2004-08-11
  • 打赏
  • 举报
回复
SELECT
纵向编号,
SUM(DECODE(横向编号,'A', 交叉点的值)) AS A ,
SUM(DECODE(横向编号,'B', 交叉点的值)) AS B
FROM T GROUP BY 纵向编号
cc59 2004-08-11
  • 打赏
  • 举报
回复
decode肯定是不行的.
请仔细看一下这个表的结构.
yogihoo 2004-08-11
  • 打赏
  • 举报
回复
用decode函数试试
th820901 2004-08-11
  • 打赏
  • 举报
回复
GZ

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧