Sign-up....

求个列在转行的sql

求个列在转行的sql

在网上搜索了一下,找到一些代码,但是看到的是使用另外一个表来实现的.这样很不好,至少不能实现我要的效果.

先看一下表结构和数据

T_sum:

dept_name type_id q_cnt

罗湖 1 5

罗湖 5 1

福田 2 10

福田 3 21

南山 1 11

南山 5 4

T_type:--该表可维护(添加删除记录)

type_id type_name

1 X

2 Y

3 Z

4 A

5 B

6 C

要求得到结果:

dept_name X Y Z A B C

罗湖 5 0 0 0 1 0

福田 0 10 21 0 0 0

南山 11 0 0 0 0 4

[299 byte] By [1234567] at [2007-8-15 11:25:18]
# 1 Re: 求个列在转行的sql
T_type 可维护的意思是不是说,结果集的列的个数是不确定的?

如果是这样,只好写PL/SQL来实现了

周冲 at 2007-5-14 17:49:26 >
# 2 Re: 求个列在转行的sql
用decode可以实现的呀!
winay at 2007-5-14 17:49:36 >
# 3 Re: 求个列在转行的sql
因为我上面给出T_sum还是一个试图,就有decode函数了,而且还在decode函数中调用了一个自定义函数

--由于用户要求变了,decode(表字段1,4,funtionname(另一个表的字段1),3,'X',2,'Y',1,'Z',1,'A',0,'B')

然后又要分组统计,所以不得不使用视图了

明月几时有 at 2007-5-14 17:50:16 >
# 4 Re: 求个列在转行的sql
其实在mssql下应该比较容易实现,因为它的局部临时表是面向session的,oracle是全局的临时表就那么麻烦了

破冰船 at 2007-5-14 17:50:29 >
# 5 Re: 求个列在转行的sql
如果最终返回的结果集的列是 固定的,就比较好办了,也许,管道函数的方式可供参考,这个函数可以由你自己直接指定返回的记录集的每条记录的每个字段的值

管道化表函数的用法可参考(不过只能9i 以上才能用):

Oracle

All Classified