关于一个查询,列转行的请教

AsherLay 2009-12-23 04:30:03
现在我能从5个表中查询到的结果如下

比如

ID NAME VALUE
1 a 10
1 b 20
1 c 30
2 b 25
2 d 40

我需要的结果是
ID a b c d
1 10 20 30
2 25 40


id, name ,value都不是一张表的,而且不知道name有多少种,也不知道会查出多少数据

不知道有没有高手赐教
...全文
139 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfgadnts 2009-12-24
  • 打赏
  • 举报
回复

上述的都是固定的Name (a,b,c,d),

如果 Name 不固定,需要取得所有的Name (Distinct) 做循环,
拼写动态的SQL ,比较麻烦,大致思路如下:
for i in 1..Name列数 loop
sql := sql || 'MAX(decode(t1.SEQ,' || i || ',ID)) ID_' || i || ',';
在子查询中取得SEQ
sql:= sql || ' SELECT DENSE_RANK() OVER(ORDER BY Name ASC) SEQ, e.* ';
tjuxl123 2009-12-23
  • 打赏
  • 举报
回复
select id "ID",sum(decode(name,'a',null))"a",
sum(decode(name,'b',null))"b",
(decode(name,'c',null))"c",
(decode(name,'d',null))"a"
from table_name
group by id
gxjwqm 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wh62592855 的回复:]
SQL codeSQL>select*from t1;

ID NAME VALUE---------- ---------- ----------1 a101 b201 c302 b252 d40

SQL>select id,2max(decode(name,'a',value)) a,3max(decode(name,'b',value)) b,4max?-
[/Quote] up
wh62592855 2009-12-23
  • 打赏
  • 举报
回复
不过鉴于这里你NAME列的值不确定
那么可以参照#2的兄弟给出的链接

http://topic.csdn.net/u/20091019/11/67cd55a3-3f42-4db7-a3f8-91dd52a913cd.html

总结的挺好的~
wh62592855 2009-12-23
  • 打赏
  • 举报
回复
SQL> select * from t1;

ID NAME VALUE
---------- ---------- ----------
1 a 10
1 b 20
1 c 30
2 b 25
2 d 40

SQL> select id,
2 max(decode(name,'a',value)) a,
3 max(decode(name,'b',value)) b,
4 max(decode(name,'c',value)) c,
5 max(decode(name,'d',value)) d
6 from t1
7 group by id;

ID A B C D
---------- ---------- ---------- ---------- ----------
1 10 20 30
2 25 40
ojuju10 2009-12-23
  • 打赏
  • 举报
回复
http://www.cnblogs.com/gkl0818/archive/2009/02/25/1398078.html
这个对你有帮助的
gelyon 2009-12-23
  • 打赏
  • 举报
回复
对你现在的那个结果集做处理,假设你将这个结果集取个别名rs,像你这个问题,采用decode函数,
select id,max(decode(name,'a',name,'')) a,max(decode(name,'b',name,'')) b,max(decode(name,'c',name,'')) c,max(decode(name,'d',name,'')) d from rs;

另外,你说的name不知道有多少,我介意你用Oracle的分析函数去实现,最好做个rank好处理些。
小灰狼W 2009-12-23
  • 打赏
  • 举报
回复
上面的'hzl'是随便写的,用你的表名替换掉
小灰狼W 2009-12-23
  • 打赏
  • 举报
回复
参考下
http://topic.csdn.net/u/20091019/11/67cd55a3-3f42-4db7-a3f8-91dd52a913cd.html
编译过程后,执行
proc('hzl','id','name','value');

select * from v_tmp查看结果
iqlife 2009-12-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/you_tube/archive/2009/04/10/4059251.aspx
参考下上面的,对于不固定的比较繁琐

17,082

社区成员

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

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