oracle行转列怎么实现

yuji821 2011-02-27 07:30:59
如:
uu type data
aa 1 209
aa 2 414
aa 10 53
bb 1 93
bb 2 893
bb 10 834
要显示成

uu 1 2 10
aa 209 414 53
bb 93 893 834
,type一定是1,2,10这三个数字,可以写死
...全文
259 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
strive_bo 2011-02-28
  • 打赏
  • 举报
回复
SELECT TABLE_A.UU,
MAX(DECODE(TABLE_A.TYPE, 1, DATA)) "1",
MAX(DECODE(TABLE_A.TYPE, 2, DATA)) "2",
MAX(DECODE(TABLE_A.TYPE, 10, DATA)) "10"
FROM (SELECT UU,
TYPE,
DATA,
ROW_NUMBER() OVER(PARTITION BY TYPE ORDER BY UU DESC) SEQ
FROM TABLENAME) TABLE_A
GROUP BY TABLE_A.UU
chenfeng03 2011-02-28
  • 打赏
  • 举报
回复
学习了,一般我是直接复制到Excel后转换
minitoy 2011-02-28
  • 打赏
  • 举报
回复
3楼就是了.
如果1000行你还采用这种展现方式,那是你自己逻辑的问题.而不是sql语句的问题.
如果你的列不确定,最好用动态sql,自己按3楼的格式去拼sql
Ma Ding 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qq646748739 的回复:]
引用 5 楼 acherat 的回复:
3# 的是可以的,你用的语句是下边的
15 select uu,
16 max(decode(type, 1, data)) "1",
17 max(decode(type, 2, data)) "2",
18 max(decode(type, 10, data)) "10"
19 from tmp
20 group by uu;
这段,不是……
[/Quote]


顶一下 给分哦 LZ
碧水幽幽泉 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acherat 的回复:]
3# 的是可以的,你用的语句是下边的
15 select uu,
16 max(decode(type, 1, data)) "1",
17 max(decode(type, 2, data)) "2",
18 max(decode(type, 10, data)) "10"
19 from tmp
20 group by uu;
这段,不是上边with那段!with是给……
[/Quote]
是啊!
你只要使用以下SQL语句就行了。

select uu,
max(decode(type, 1, data)) "1",
max(decode(type, 2, data)) "2",
max(decode(type, 10, data)) "10"
from tbname --tbname换成你的表名就OK了
group by uu;


ilovemk 2011-02-27
  • 打赏
  • 举报
回复
看你的数据库版本了,11g可以用PIVOT来实现。
AcHerat 2011-02-27
  • 打赏
  • 举报
回复
3# 的是可以的,你用的语句是下边的
15 select uu,
16 max(decode(type, 1, data)) "1",
17 max(decode(type, 2, data)) "2",
18 max(decode(type, 10, data)) "10"
19 from tmp
20 group by uu;
这段,不是上边with那段!with是给出测试环境的!楼主不要理解错!把tmp改成你的表名就可以。
yuji821 2011-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq646748739 的回复:]
SQL code

SQL> with tmp as
2 (
3 select 'aa' uu, 1 type, 209 data from dual
4 union all
5 select 'aa' uu, 2 type, 414 data from dual
6 union all
7 select 'aa' uu, 10 type, 53……
[/Quote]

这个不行,如果uu有10000种,那不
碧水幽幽泉 2011-02-27
  • 打赏
  • 举报
回复

SQL> with tmp as
2 (
3 select 'aa' uu, 1 type, 209 data from dual
4 union all
5 select 'aa' uu, 2 type, 414 data from dual
6 union all
7 select 'aa' uu, 10 type, 53 data from dual
8 union all
9 select 'bb' uu, 1 type, 93 data from dual
10 union all
11 select 'bb' uu, 2 type, 893 data from dual
12 union all
13 select 'bb' uu, 10 type, 834 data from dual
14 )
15 select uu,
16 max(decode(type, 1, data)) "1",
17 max(decode(type, 2, data)) "2",
18 max(decode(type, 10, data)) "10"
19 from tmp
20 group by uu;

UU 1 2 10
-- ---------- ---------- ----------
aa 209 414 53
bb 93 893 834

yuji821 2011-02-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingkingzhu 的回复:]
wm_concat()
group by
[/Quote]

请完整的把oracle pl/sql语句写给我,谢谢
kingkingzhu 2011-02-27
  • 打赏
  • 举报
回复
wm_concat()
group by

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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