行列转换问题(一得到答案就给分)

gisinfo 2008-07-31 04:52:38
情况是这样的
我要一张表
BH GZ(工种) RS(人员数量)
PDA03116 注册兽医师 2
PDA03116 注册兽医师 3
PDA03116 无定级兽医 1
PDA03116 中级技工 2
PDA03116 初级技工 1
PDA03116 无定级技工 2
PDA03117 无定级技工 7
...........
...........
想转换成如下形式:
BH j_0(注册兽医师) j_1(注册兽医师) j_2(无定级兽医) j_3(中级技工) j_4(初级技工) j_5(无定级技工)
PDA03116 2 3 1 2 1 2
PDA03117 .... .... ...... ..... ..... 7

我用DECODE()函数怎么也没解决这个问题
BH 会重复
请赐教


还有谁有谁有 oracle的performance manager学习资料发一份(另外给分)
EMAIL:
TONY.GU@GISINFO.COM
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fyrui 2008-07-31
  • 打赏
  • 举报
回复
正解

[Quote=引用 5 楼 hebo2005 的回复:]
select bh ,sum(decode(GZ,'注册兽医师',RS,0)) "j_1(注册兽医师)"
,sum(decode(GZ,'无定级兽医,RS,0)) "j_2(无定级兽医)"
....
from a
group by bh
[/Quote]
lxzooz 2008-07-31
  • 打赏
  • 举报
回复
mark
oracledbalgtu 2008-07-31
  • 打赏
  • 举报
回复
DROP TABLE tt;
CREATE TABLE tt(BH VARCHAR2(20), GZ VARCHAR2(20), RS VARCHAR2(20));

INSERT INTO TT VALUES ('PDA03116', '注册兽医师', 3);
INSERT INTO TT VALUES ('PDA03116', '无定级兽医', 1);
INSERT INTO TT VALUES ('PDA03116', '中级技工', 2);
INSERT INTO TT VALUES ('PDA03116', '初级技工 ', 1);
INSERT INTO TT VALUES ('PDA03116', '无定级技工', 2);
INSERT INTO TT VALUES ('PDA03117', '无定级技工', 7);
COMMIT;
SELECT BH,
MAX(DECODE(GZ, '注册兽医师', RS)),
MAX(DECODE(GZ, '无定级兽医', RS)),
MAX(DECODE(GZ, '中级技工', RS)),
MAX(DECODE(GZ, '初级技工', RS)),
MAX(DECODE(GZ, '无定级技工', RS))
FROM TT
GROUP BY BH
ORDER BY 1;
[Quote=引用楼主 gisinfo 的帖子:]
情况是这样的
我要一张表
BH GZ(工种) RS(人员数量)
PDA03116 注册兽医师 2
PDA03116 注册兽医师 3
PDA03116 无定级兽医 1
PDA03116 中级技工 2
PDA03116 初级技工 1
PDA03116 无定级技工 2
PDA03117 无定级技工 7
...........
...........
想转换成如下形式:
BH j_0(注册兽医师) j_1(注册兽医师) j_2(无定级兽医) j_3(中级技工) j_4…
[/Quote]
cosio 2008-07-31
  • 打赏
  • 举报
回复
1 PDA03116 注册兽医师 2
2 PDA03116 注册兽医师 3
3 PDA03116 无定级兽医 1
4 PDA03116 中级技工 2
5 PDA03116 初级技工 1
6 PDA03117 无定级技工 2
7 PDA03117 无定级技工 7

表中的内容:
select Distinct t01,
max(case a when '1' then t03 end) A,
max(case a when '2' then t03 end) B,
max(case a when '3' then t03 end) C,
max(case a when '4' then t03 end) D,
max(case a when '5' then t03 end) E,
max(case a when '6' then t03 end) F,
max(case a when '7' then t03 end) G
from (
select test.*,to_char(rownum) a from test)
group by t01

RESULT:
PDA03116 2 3 1 2 1
PDA03117 2 7
cosio 2008-07-31
  • 打赏
  • 举报
回复



select Distinct t01,
max(case a when '1' then t03 end) A,
max(case a when '2' then t03 end) B,
max(case a when '3' then t03 end) C,
max(case a when '4' then t03 end) D,
max(case a when '5' then t03 end) E,
max(case a when '6' then t03 end) F,
max(case a when '7' then t03 end) G
from (
select test.*,to_char(rownum) a from test)
group by t01
hebo2005 2008-07-31
  • 打赏
  • 举报
回复
select bh ,sum(decode(GZ,'注册兽医师',RS,0)) "j_1(注册兽医师)"
,sum(decode(GZ,'无定级兽医,RS,0)) "j_2(无定级兽医)"
....
from a
group by bh
dbcxbj 2008-07-31
  • 打赏
  • 举报
回复
with test as (select 'PDA03116' BH,'注册兽医师' GZ,3 RS from dual
union all
select 'PDA03116' BH,'无定级兽医' GZ,1 RS from dual
union all
select 'PDA03116' BH,'中级技工' GZ,2 RS from dual
union all
select 'PDA03116' BH,'初级技工' GZ,1 RS from dual
union all
select 'PDA03116' BH,'无定级技工' GZ,2 RS from dual
union all
select 'PDA03117' BH,'无定级技工' GZ,7 RS from dual)
select bh,sum(decode(gz,'注册兽医师',rs,0)) "j_1(注册兽医师)",
sum(decode(gz,'无定级兽医',rs,0)) "j_2(无定级兽医)",
sum(decode(gz,'中级技工',rs,0)) "j_3(中级技工)",
sum(decode(gz,'初级技工',rs,0)) "j_4(初级技工)",
sum(decode(gz,'无定级技工',rs,0)) "j_5(无定级技工)" from test
group by bh;

gisinfo 2008-07-31
  • 打赏
  • 举报
回复
情况是这样的
我要一张表
BH GZ(工种) RS(人员数量)
PDA03116 注册兽医师 3
PDA03116 无定级兽医 1
PDA03116 中级技工 2
PDA03116 初级技工 1
PDA03116 无定级技工 2
PDA03117 无定级技工 7
...........
...........
想转换成如下形式:
BH j_1(注册兽医师) j_2(无定级兽医) j_3(中级技工) j_4(初级技工) j_5(无定级技工)
PDA03116 3 1 2 1 2
PDA03117 .... ...... ..... ..... 7

我用DECODE()函数怎么也没解决这个问题
BH 会重复
请赐教


还有谁有谁有 oracle的performance manager学习资料发一份(另外给分)
EMAIL:
TONY.GU@GISINFO.COM
gisinfo 2008-07-31
  • 打赏
  • 举报
回复
不一样我写错了


dbcxbj 2008-07-31
  • 打赏
  • 举报
回复
PDA03116 注册兽医师 2
PDA03116 注册兽医师 3
这两行的"注册兽医师"是一样的?

17,377

社区成员

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

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