▲▲▲百分大求救,高手来讨论,菜鸟来学习,来者有分!▲▲▲

dcren521 2004-12-23 06:21:55
我要请教各位的一个关于行转列的问题是:
参考资料:(下面是网上一位高手提供的行转类的例子,if 你是高手 go to ★我的问题★)
表ttt有三个字段
seq --序列
jcxm --检查项目
zhi --值

数据分别如下:
seq   jcxm   zhi
------- -------- --------
11     1    0.50
11     2    0.21
11     3    0.25
12     1    0.24
12     2    0.30
12     3    0.22

实现功能
创建视图时移动行值为列值


create view v_view1
as
select seq,
sum(decode(jcxm,1, zhi)) 检测项目1,
sum(decode(jcxm,2, zhi)) 检测项目2,
sum(decode(jcxm,3, zhi)) 检测项目3
from ttt
group by seq;

序号 检测项目1  检测项目2  检测项目3
11     0.50    0.21     0.25
12     0.24    0.30     0.22

★★★★★★★★★★★★我的问题★★★★★★★★★★★★★★

对于

------------------------------------------------
col1 | col2 | col3 | type | value1 | value2
------------------------------------------------
a | b | c | 1 | 3 | 2
x | y | z | 2 | 7 | 5
a | b | c | 2 | 4 | 6
x | y | z | 1 | 8 | 9

主键为(col1 , col2 , col3 , type)

要求输出

------------------------------------------------
col1 | col2 | col3 | type1 | type2 | sumvalue2
------------------------------------------------
a | b | c | 3 | 4 | 8
x | y | z | 8 | 7 | 14


注:
例如
输出数据第一行中type1对应的值为记录 a,b,c,1 对应的值value1,sumvalue2为记录 a,b,c,1 对应的值value2与 a,b,c,2 对应的值value2的和

因为group by 不支持多个字段组合,所以本操作难度较大,我到是有个想法,但感觉不太好,所以想先听听大家的意见!

...全文
192 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
anyteam 2004-12-23
  • 打赏
  • 举报
回复
接分!
royaman 2004-12-23
  • 打赏
  • 举报
回复
看不懂
wangybyangxr 2004-12-23
  • 打赏
  • 举报
回复
为上面所有的叫好,写的好啊!
lynx 2004-12-23
  • 打赏
  • 举报
回复
响应1楼,给个分析函数的做法:
select
dmp.col1,
dmp.col2,
dmp.col3,
sum(nvl(type2,0)) type1,
sum(nvl(type1,0)) type2,
sum(value2)
from
(select col1,
col2,
col3,
decode(type,
1,
lead(value1, 1) over(order by col1, col2, col3,type,0)) type1,
decode(type,
2,
lag(value1, 1) over(order by col1, col2, col3,type,0)) type2,
value2
from my_test) dmp
group by
dmp.col1,
dmp.col2,
dmp.col3
liuyi8903 2004-12-23
  • 打赏
  • 举报
回复
:) ORARichard(没钱的日子......) 老兄太谦虚了!
ORARichard 2004-12-23
  • 打赏
  • 举报
回复
哈,liuyi8903(甜脆夹心)
还是老兄高啊。我怎么就给绕到那个视图里去了啊
ORARichard 2004-12-23
  • 打赏
  • 举报
回复
SQL> create or replace view tbview
2 as
3 select col1,col2,col3,
4 sum(decode(type,1, value1)) type1,
5 sum(decode(type,2, value1)) type2
6 from tb
7 group by col1,col2,col3;

查看已建立。

SQL> select * from tb;

CO CO CO TY VA VA
-- -- -- -- -- --
a b c 1 3 2
x y z 2 7 5
a b c 2 4 6
x y z 1 8 9

SQL> select * from tbview;

CO CO CO TYPE1 TYPE2
-- -- -- --------- ---------
a b c 3 4
x y z 8 7

SQL> select a.*,b.sumvalue2 from tbview a,
2 (
3 select col1,col2,col3,sum(value2) sumvalue2 from tb
4 group by col1,col2,col3
5 ) b
6 where a.col1=b.col1 and a.col2=b.col2 and a.col3=b.col3;

CO CO CO TYPE1 TYPE2 SUMVALUE2
-- -- -- --------- --------- ---------
a b c 3 4 8
x y z 8 7 14

SQL>
liuyi8903 2004-12-23
  • 打赏
  • 举报
回复
当然这里如果是type的值比较固定的话可以这样来使用.
假如type的值很多,且无法估算的话,那就要用动态sql了.编写存储过程可以解决.
liuyi8903 2004-12-23
  • 打赏
  • 举报
回复
你看这是不是你要的?

SQL> select * from test;

COL1 COL2 COL3 TYPE VALUE1 VALUE2
---------- ---------- ---------- ----- ------ ------
a b c 2 4 6
x y z 2 7 5
x y z 1 8 9
a b c 1 3 2

SQL>
SQL> Select Col1,
2 Col2,
3 Col3,
4 Sum(Decode(Type, 1, Value1)) Type1,
5 Sum(Decode(Type, 2, Value1)) Type2,
6 Sum(Value2)
7 From Test
8 Group By Col1, Col2, Col3
9 ;

COL1 COL2 COL3 TYPE1 TYPE2 SUM(VALUE2)
---------- ---------- ---------- ---------- ---------- -----------
a b c 3 4 8
x y z 8 7 14

SQL>
dcren521 2004-12-23
  • 打赏
  • 举报
回复
to ORARichard(没钱的日子......)
如何分组?group by 后只能接一个字段呀!!!
ORARichard 2004-12-23
  • 打赏
  • 举报
回复
行列转列后,再对结果集做分组SUM就行了
dcren521 2004-12-23
  • 打赏
  • 举报
回复
to liuyi8903(甜脆夹心) :能否指点一二,在下感觉不尽!
wan_jxsuda 2004-12-23
  • 打赏
  • 举报
回复
关注中!!
liuyi8903 2004-12-23
  • 打赏
  • 举报
回复
可以用分析函数.

17,140

社区成员

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

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