求高效的SQL语句?

[复制链接]
查看11 | 回复5 | 2007-1-6 21:14:12 | 显示全部楼层 |阅读模式
一个表A如下:
 term typedata
-------------------- ----------
1..........A..........10
1..........B...........5
1..........C...........20
2..........A...........34
2..........D...........9
2..........E...........17
3..........A...........6
-----------------------------------------------
如何变成(表B)
......term....... A....... B.......C.......D.......E
-------------------------------------------------------------------
1.......10.......5.......20.......0........0
2.......34.......0 .......0........9.......17
3....... 6....... 0........0........0........0
------------------------------------------------------------------
求一高效的SQL语句,实现表A到B的转换
感谢各位!
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
SQL> SELECT * FROM AA;
TERM MY_TYPEMY_DATA
---------- -
----------
1 A
10
1 B 5
1 C
20
2 A
34
2 D 9
2 E
17
3 A 6
SQL> select term,

sum(decode(my_type,'A',my_data,0)) A,

sum(decode(my_type,'B',my_data,0)) B,

sum(decode(my_type,'C',my_data,0)) C,

sum(decode(my_type,'D',my_data,0)) D,

sum(decode(my_type,'E',my_data,0)) E
from aa group by term;
TERM
A
B
C
D
E
---------- ---------- ---------- ---------- ---------- ----------
1 10
5 20
0
0
2 34
0
0
9 17
3
6
0
0
0
0
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
对于不同值比较少的话, 可以这么做.. 多了就无法做了..
也可以使用case来实现..
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
case 如何实现,请指明?
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
定义一个存储过程,循环遍历type的值,拼凑成decode(type,A,my_data,0).....的SQL语句
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
最初由 bq_wang 发布
[B]定义一个存储过程,循环遍历type的值,拼凑成decode(type,A,my_data,0).....的SQL语句 [/B]

也可以用sql生成sql
select 'select term,' from dual
union all
select distinct'sum(decode(my_type,'''||my_type||''',my_data,0))'|| my_type||',' from aa
union all
select 'from aa group by term' from dual;
记住要把生成sql的最后一个“,”删除
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行