请哪位师傅帮帮忙,赠送100分!行转列的问题?

罗成2023 2009-08-24 03:56:06
这种情况的表结构:CREATE TABLE temp_jcyzy (id number(4), yf
varchar(10),ycnf varchar2(6),jb varchar2(6),cslx varchar2(6),jc
number(6),yzy number(16,6)),请问将下表怎么转?
id yf ycnf jb cslx jc yzy
1 1月 200908 油井 100 0 0
2 1月 200908 油井 1340 0 0
3 1月 200908 油井 2321 0 0
4 1月 200908 油井 1100 1 0
5 1月 200908 油井 全部 1 0
6 2月 200908 油井 100 0 0
7 2月 200908 油井 1340 0 0
8 2月 200908 油井 2321 0 0
9 2月 200908 油井 1100 0 0.0104
10 2月 200908 油井 全部 0 0.0104
把以上的这个表结果转成如下:在oracle中怎么做?请各位师傅帮帮忙啊!我是新

手,遇到拦路虎了!请帮我写写
yf jc yzy jc yzy jc yzy jc yzy jc yzy
1月 0 0 0 0 0 0 1 0 1 0
2月 0 0 0 0 0 0 0 0.0104 0 0.0104
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
WorldMobile 2009-08-25
  • 打赏
  • 举报
回复
呵呵,解决就好,

友情提示,问题解决了请尽快结贴
罗成2023 2009-08-25
  • 打赏
  • 举报
回复
用存储过程实现的:给大家参考一下,相互学习:V_SQL := 'SELECT min(id) as id,yf as 月份'; --循环处理不定行转列
for cs in (select distinct t.cslx from (select cslx,id from temp_jcyzy where ycnf=p_ycsj and jb ='油井' order by id) t)
loop
--V_SQL := V_SQL ||','||'sum(decode(jc,'''||v_jc||''',jc,null))|| AS 井次'||','||'sum(decode(yzy,'''||v_yzy||''',yzy,null))'||' AS 预増油';
--V_SQL := V_SQL ||',cslx'||' AS cs';
--V_SQL := V_SQL ||','||'jc'||' AS '||'井次'||cs.cslx||','||'yzy'||' AS'||' 预增油'||cs.cslx ;
--sql_command||' , max(decode(课程,'''||i.课程||''', 分数,0)) ' ||i.课程;
--V_SQL := V_SQL ||','||'jc'||' AS '||'井次'||cs.cslx||','||'yzy'||' AS'||' 预增油'||cs.cslx ;
V_SQL := V_SQL ||',sum(decode(cslx,'''||cs.cslx||''',jc,0))'||' 井次'||',sum(decode(cslx,'''||cs.cslx||''',yzy,0))'||' 预増油';

/*
open CURSOR_1 ;
LOOP

FETCH CURSOR_1 INTO v_yf;
EXIT WHEN CURSOR_1%NOTFOUND;
--open CURSOR_2(v_yf,p_ycsj) ;
--LOOP
--FETCH CURSOR_2 INTO v_jc,v_yzy;
--EXIT WHEN CURSOR_2%NOTFOUND;
iu
--close CURSOR_2;
END LOOP;
close CURSOR_1;
*/
END LOOP;
V_SQL := V_SQL || ' FROM temp_jcyzy group by yf order by id ';

--V_SQL := 'CREATE OR REPLACE VIEW RESULT AS '|| V_SQL;
--EXECUTE IMMEDIATE V_SQL;
--DBMS_OUTPUT.PUT_LINE(V_SQL);
END;
--open rez_cur for 'select * from '||' RESULT';
open rez_cur for V_SQL;
WorldMobile 2009-08-24
  • 打赏
  • 举报
回复
不知道楼主怎么实现的
WorldMobile 2009-08-24
  • 打赏
  • 举报
回复
用decode结合sum应该比较容易实现
永生天地 2009-08-24
  • 打赏
  • 举报
回复
是不是在oracle上写存储过程了,
可以贴出来给大家学习一下吗
罗成2023 2009-08-24
  • 打赏
  • 举报
回复
感谢各位师傅的指点,已解决!
昨军事网有感,长城内外,兴邦强国。
hanxianzhong 2009-08-24
  • 打赏
  • 举报
回复
用交叉报表很方便就实现了
yinggz 2009-08-24
  • 打赏
  • 举报
回复
建立两个datawindow,一个存放原始记录,另一个安所需建立一个External类型的目的数据窗口,
yf jc100 yzy100 jc1430 yzy1430 jc2312 yzy2312 ...
然后编制一段循环程序,按要求将数据从原数据存放到目标数据窗口就可以达到目的。


int ii,n
string yf

dw_2.SetRedraw(false)
dw_1.retrieve()
if dw_1.rowcount()>0 then
dw_2.reset()
ii=1
yf=dw_1.getitemstring(ii,"yf")
n=dw_2.insertrow(0)
dw_2.setitem(n,"yf",yf)
do while ii<=dw_1.rowcount()
if dw_1.getitemstring(ii,"yf")<>yf then
ym=dw_1.getitemstring(ii,"yf")
n=dw_2.insertrow(0)
dw_2.setitem(n,"yf",yf)
end if
if dw_1.getitemstring(ii,"jc")='100' then
dw_2.setitem(n,"jc100",dw_1.getitemnumber(ii,"jc"))
dw_2.setitem(n,"zyz100",dw_1.getitemnumber(ii,"yzy"))
end if
if dw_1.getitemstring(ii,"jc")='1430' then
dw_2.setitem(n,"jc1430",dw_1.getitemnumber(ii,"jc"))
dw_2.setitem(n,"zyz1430",dw_1.getitemnumber(ii,"yzy"))
end if
if dw_1.getitemstring(ii,"jc")='2312' then
dw_2.setitem(n,"jc2312",dw_1.getitemnumber(ii,"jc"))
dw_2.setitem(n,"zyz2312",dw_1.getitemnumber(ii,"yzy"))
end if
...
...
...
ii=ii + 1
loop

end if
dw_2.SetRedraw(true)

我有这样的实际应用,供你参考。
永生天地 2009-08-24
  • 打赏
  • 举报
回复
写了两句,感觉是个比较复杂的存储过程。
sun1976 2009-08-24
  • 打赏
  • 举报
回复
自己写from
where
不用我教了吧
sun1976 2009-08-24
  • 打赏
  • 举报
回复
select yf,
sum(case cslx when '100' then jc else 0) as jc_100,
sum(case cslx when '100' then yzy else 0) as yzy_100,
sum(case cslx when '1340' then jc else 0) as jc_1340,
sum(case cslx when '1340' then yzy else 0) as yzy_1340,
sum(case cslx when '2321' then jc else 0) as jc_2321,
sum(case cslx when '2321' then yzy else 0) as yzy_2321,
sum(case cslx when '1100' then jc else 0) as jc_1100,
sum(case cslx when '1100' then yzy else 0) as yzy_1100,
sum(case cslx when '全部' then jc else 0) as jc_all,
sum(case cslx when '全部' then yzy else 0) as yzy_all
group by yf
order by yf
做成数据窗口后给每个列设置和市的标题
xuam 2009-08-24
  • 打赏
  • 举报
回复
用交叉报表

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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