【在线求助】纵表转横表的相关问题Oracle下sql切磋
pl/SQL中如何解决纵表转横表,显示报表,大家有什么好的建议或意见吗?
帮忙看看这个sql应该怎么写?
现在有个表A ,有两个字段a1(个人编号),a2(待遇类别)
数据如下:
a1 a2
12345 101
12345 102
12345 103
12345 104
123 101
123 104
我现在想通过查询得到以下的输出结果:
a1(个人编号) 待遇类别1 待遇类别2 待遇类别3 待遇类别4.。
12345 101 102 103 104
123 101 104请大家帮忙看看怎么能通过sql查询出来,谢谢先
pl/SQL中如何解决纵表转横表,显示报表,大家有什么好的建议或意见吗?
帮忙看看这个sql应该怎么写?
现在有个表A ,有两个字段a1(个人编号),a2(待遇类别)
数据如下:
a1 a2
12345 101
12345 102
12345 103
12345 104
123 101
123 104
我现在想通过查询得到以下的输出结果:
a1(个人编号) 待遇类别1 待遇类别2 待遇类别3 待遇类别4.。
12345 101 102 103 104
123 101 104请大家帮忙看看怎么能通过sql查询出来,谢谢先
解决方案 »
- 求解,使用SQL查出正确的身份证号码,Oracle新手,莫怪!
- oracle10g rownum与order by的问题
- 给分20分:ASP中如何远程联接(局域网内)ORALCE数据库?在线等待!!!!
- 简单问题:急得头疼。
- 为什么我的oracle数据库重起机器就得重新打开一便呢输入用户名和密码之后就提示:oracle not available
- 关于Oracle 10g的许可“Oracle Certification Matrices”,谁给详细解说一下?
- 怎么将dbf文件数据导入到Oracle去(很紧,送100分)
- 请大家帮我看看这个查询!很急!
- getHibernateTemplate find 不能返回正确的值
- 中文版CentOS下,安装ORACLE12C,图形界面乱码问题
- 为NULL的行造成MAX取值问题
- 关于raid的问题
select max(decode(a2,101,a2))待遇类别1,
max(decode(a2,102,a2))待遇类别2,
max(decode(a2,103,a2))待遇类别3,
max(decode(a2,104,a2))待遇类别4
group by a1
自己加上去
如:待遇类别1 待遇类别2 待遇类别3 待遇类别4 …… 待遇类别n;;难道也要手工逐个写: max(decode(a2,101,a2))待遇类别1,
max(decode(a2,102,a2))待遇类别2,
max(decode(a2,103,a2))待遇类别3,
max(decode(a2,104,a2))待遇类别4
…………
max(decode(a2,104,a2))待遇类别n写n条,岂不很麻烦,而且sql的执行效率估计也不会很高,不知道有没有更好的sql写法?请老师们指教,,,
A1,
decode(sum(T_101),0,'','101') as C1,
decode(sum(T_102),0,'','102') as C2,
decode(sum(T_103),0,'','103') as C3,
decode(sum(T_104),0,'','104') as C4
from
(
select A1,
decode(A2, '101', 1,0) as T_101,
decode(A2, '102',1,0) as T_102,
decode(A2, '103', 1,0) as T_103,
decode(A2, '104', 1,0) as T_104
from A)
group by A1;还有没有更好的写法,或者有更复杂的情况,大家拿出来分享一下现在的关键问题就是表中的待遇类别中的项目太多,没有什么规律,都是依据文件应付待遇项目,总共有二百到三百个待遇项目;
如果可以把这些待遇归到一列的话,就解决了
select a1,wm_concat(a2) 待遇类别 from a
如果觉得不够直观
select a1,wm_concat(a2) from (
select t.a1,nvl(a.a2,'000')a2 from
(select * from (select distinct a2 from a)t1,
(select distinct a1 from a)t2 order by a1,a2)t,a
where t.a1=a.a1(+) and t.a2=a.a2(+)
order by t.a1,t.a2)
group by a1