表A
id name
101 数学
102 语文
103 化学
104英语
表B
SName Score NID
张三 85 101
张三 30 102
李四 100 101
李四 70 103
王五 91 102
王五 47 104
王五 88 101
王五 65 103想最终显示为 语文 数学 化学 英语
张三 85 30
李四 100 70
王五 88 65 88
这个sql语句要怎么写呢
id name
101 数学
102 语文
103 化学
104英语
表B
SName Score NID
张三 85 101
张三 30 102
李四 100 101
李四 70 103
王五 91 102
王五 47 104
王五 88 101
王五 65 103想最终显示为 语文 数学 化学 英语
张三 85 30
李四 100 70
王五 88 65 88
这个sql语句要怎么写呢
解决方案 »
- ORACLE 访问外部表 ORA-29913
- Oracle10g 的 逻辑结构和物理结构的几个问题,请您解答
- 怎么向表中插入这条数据,急!!!
- 缺少什么关键字
- 求教关于union all问题,急,急,急!
- 天啊.空字符串是NULL??
- Oracle Net8 Easy Config问题
- 大家oracle10g用过了没有?我怎么enterprise manager登陆不了??
- 请问,linux下如何启动Oracle Management和Agent得服务
- 请问一些ERP方面的问题,设备折旧(余额递减法)按月折怎么计算???
- 【急求】在使用oracle copy命令复制表中包含long数据类型的数据时报错
- sum函数计算次数问题
sum(decode(nid,102,score,0)) "语文",
sum(decode(nid,103,score,0)) "化学",
sum(decode(nid,104,score,0)) "英语",
from B
group by sname
--如果你要的话,这个多个表效率肯定低些
select B.sname,sum(decode(A.name,'数学',B.score,0)) "数学",
sum(decode(A.name,'语文',B.score,0)) "数学",
sum(decode(A.name,'化学',B.score,0)) "化学",
sum(decode(A.name,'英语',B.score,0)) "英语",
from A,B
where A.id=B.nid
group by B.sname
SELECT '101' ID,'数学'NAME FROM DUAL UNION ALL
SELECT '102','语文' FROM DUAL UNION ALL
SELECT '103','化学' FROM DUAL UNION ALL
SELECT '104','英语' FROM DUAL
),
B AS(
SELECT '张三'SName,85 Score,'101' NID FROM DUAL UNION ALL
SELECT '张三', 30, '102' FROM DUAL UNION ALL
SELECT '李四', 100, '101' FROM DUAL UNION ALL
SELECT '李四', 70, '103' FROM DUAL UNION ALL
SELECT '王五', 91, '102' FROM DUAL UNION ALL
SELECT '王五', 47, '104' FROM DUAL UNION ALL
SELECT '王五', 88, '101' FROM DUAL UNION ALL
SELECT '王五', 65, '103'FROM DUAL
)
SELECT SName 姓名,Max(Decode(NID,'101',Score,0)) 数学,
Max(Decode(NID,'102',Score,0)) 语文,
Max(Decode(NID,'103',Score,0)) 化学,
Max(Decode(NID,'104',Score,0)) 英语
FROM a,b
WHERE a.id=b.nid
GROUP BY SName;结果:姓名 数学 语文 化学 英语
-------------------------------------
张三 85 30 0 0
李四 100 0 70 0
王五 88 91 65 47
sum(decode(A.sname,'语文',B.score,0)) "数学",
sum(decode(A.sname,'化学',B.score,0)) "化学",
sum(decode(A.sname,'英语',B.score,0)) "英语"
from subject A, results B
where A.SID=B.SID
group by B.name1 黄蓉 100 0 0 99
2 张无忌 66 100 0 0
3 杨过 0 59 97 76
4 黄蓉 0 100 0 0
5 郭靖 0 0 48 0
6 郭靖 15 0 0 0郭靖 黄蓉都两条了
SQL> ed
已写入 file afiedt.buf 1 WITH A AS(
2 SELECT '101' ID,'数学'NAME FROM DUAL UNION ALL
3 SELECT '102','语文' FROM DUAL UNION ALL
4 SELECT '103','化学' FROM DUAL UNION ALL
5 SELECT '104','英语' FROM DUAL
6 ),
7 B AS(
8 SELECT '张三'SName,85 Score,'101' NID FROM DUAL UNION ALL
9 SELECT '张三', 30, '102' FROM DUAL UNION ALL
10 SELECT '李四', 100, '101' FROM DUAL UNION ALL
11 SELECT '李四', 70, '103' FROM DUAL UNION ALL
12 SELECT '王五', 91, '102' FROM DUAL UNION ALL
13 SELECT '王五', 47, '104' FROM DUAL UNION ALL
14 SELECT '王五', 88, '101' FROM DUAL UNION ALL
15 SELECT '王五', 65, '103'FROM DUAL
16 )
17 select B.sname,sum(decode(A.name,'数学',B.score,0)) "数学",
18 sum(decode(A.name,'语文',B.score,0)) "数学",
19 sum(decode(A.name,'化学',B.score,0)) "化学",
20 sum(decode(A.name,'英语',B.score,0)) "英语"
21 from A,B
22 where A.id=B.nid
23* group by B.sname
24 /SNAM 数学 数学 化学 英语
---- ---------- ---------- ---------- ----------
王五 88 91 65 47
李四 100 0 70 0
张三 85 30 0 0
subject
SID SNAME
1 101 语文
2 102 数学
3 103 英语
4 104 化学
results
NAME SCORE SID
1 张无忌 100 101
2 张无忌 66 102
3 杨过 59 101
4 杨过 76 103
5 杨过 97 104
6 郭靖 15 102
7 郭靖 48 104
8 黄蓉 100 101
9 黄蓉 100 102
10 黄蓉 99 103select B.name,sum(decode(A.sname,'数学',B.score,0)) "数学",
sum(decode(A.sname,'语文',B.score,0)) "数学",
sum(decode(A.sname,'化学',B.score,0)) "化学",
sum(decode(A.sname,'英语',B.score,0)) "英语"
from subject A, results B
where A.SID=B.SID
group by B.name
结果
1 黄蓉 0 100 99 0
2 张无忌 100 66 0 0
3 杨过 59 0 76 97
4 黄蓉 100 0 0 0
5 郭靖 0 0 0 48
6 郭靖 0 15 0 0这个有问题 为什么呢?
你select * from results where NAME='黄蓉';
sum(decode(A.sname,'语文',B.score,0)) "数学",
sum(decode(A.sname,'化学',B.score,0)) "化学",
sum(decode(A.sname,'英语',B.score,0)) "英语"
from subject A, results B
where A.SID=B.SID
group by trim(B.name)
sum(decode(A.sname,'语文',B.score,null)) "数学",
sum(decode(A.sname,'化学',B.score,null)) "化学",
sum(decode(A.sname,'英语',B.score,null)) "英语"
from subject A, results B
where A.SID=B.SID
group by trim(B.name)
那我突然想加一条内容 那是不是还要修改sql语句呀
这样不通用呀