关于Oracle数据库的sql语句请教大家
假如有这么一张表tablenameageschool张三10A张三14B张三18C请问我该如何写sql语句得出name101418张三ABC万分感激!!!大神们帮帮我啊,...
假如有这么一张表table
name age school
张三 10 A
张三 14 B
张三 18 C
请问我该如何写sql语句得出
name 10 14 18
张三 A B C
万分感激!!!
大神们帮帮我啊,急求!!!! 展开
name age school
张三 10 A
张三 14 B
张三 18 C
请问我该如何写sql语句得出
name 10 14 18
张三 A B C
万分感激!!!
大神们帮帮我啊,急求!!!! 展开
展开全部
SQL> select * from test;
NAME AGE SCHOOL
---------- ---------- ----------
张三 10 A
张三 14 B
张三 18 C
王二 11 A
王二 15 B
王二 19 C
6 rows selected.
SQL> select name,
2 sum(decode(school,'A',age,null)) A,
3 sum(decode(school,'B',age,null)) B,
4 sum(decode(school,'C',age,null)) C
5 from test
6 group by name;
NAME A B C
---------- ---------- ---------- ----------
王二 11 15 19
张三 10 14 18
供参考,个人觉得以年龄分组没有以学校分组合理, 呵呵
NAME AGE SCHOOL
---------- ---------- ----------
张三 10 A
张三 14 B
张三 18 C
王二 11 A
王二 15 B
王二 19 C
6 rows selected.
SQL> select name,
2 sum(decode(school,'A',age,null)) A,
3 sum(decode(school,'B',age,null)) B,
4 sum(decode(school,'C',age,null)) C
5 from test
6 group by name;
NAME A B C
---------- ---------- ---------- ----------
王二 11 15 19
张三 10 14 18
供参考,个人觉得以年龄分组没有以学校分组合理, 呵呵
更多追问追答
追问
你的方法我用了结果是这样的:
NAME 10 14 18
张三 A
张三 B
张三 C
我要的是能在一条数据理显示出来,谢谢
追答
要写程序实现了
对字符串的"求和"只能通过连接实现, oracle11g有sys_connect_by_path的用法, 有兴趣可以研究一下
SQL> select name,replace(wm_concat(sa),',',' ') "school:age"
2 from (select name,school||':'||age sa from test)
3 group by name;
NAME school:age
---------- ----------------------------------------
王二 AA:10 CC:18 BB:14
张三 A:10 C:18 B:14
下面那位的方法也可以试一下,不过对age的值有限制:
SQL> select name,max("10"),max("14"),max("18")
2 from (
3 select name,
4 decode(age,'10',school) as "10",
5 decode(age,'14',school) as "14",
6 decode(age,'18',school) as "18"
7 from test )
8 group by name;
NAME MAX("10") MAX("14") MAX("18")
---------- ---------- ---------- ----------
王二 AA BB CC
张三 A B C
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
with pivot_data as
(select name,age,WM_CONCAT(school) remark from table
group by name,age)
select * from pivot_data
pivot(max(school) for age in(10,14,18))
--oracle 11g
(select name,age,WM_CONCAT(school) remark from table
group by name,age)
select * from pivot_data
pivot(max(school) for age in(10,14,18))
--oracle 11g
更多追问追答
追问
你的方法貌似行不通,我运行老是有错误、、
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
描述错了吧,结果中第一列名是name,第二列名是10?
追问
没错,所以我才会问大家的。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-05-10
展开全部
然后呢····
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询